我输入如下代码:
import java.util.Scanner;
public class Demo4 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
float f=0.0f;
System.out.println("请输入小数:");
if (scanner.hasNextFloat()){
f=scanner.nextFloat();
System.out.println("小数数据:"+f);
}else {
System.out.println("输入的不是小数数据!");
}
}
}
运行结果如下:
请问我输入一个整数,为什么会输出小数?scanner.hasNextFloat()不是只读取单精度浮点数吗?
你获取的时候
使用的是 scanner.nextFloat()
所以类型会自动转换,
比如你使用的是 nextInt() 这样的话 读取到的就是 整数了
但是hasnextfloat那里输入一个整数2它就已经认为是正确的了
@ben10044: 是的 hasNextFloat 是用来判断 你输入的值, 此时已经是转换好了的数据了
@冬冬呀: 我想问下怎么才能熟hasnextfloat能判断整数不是Float类型?另辟蹊径的方法我倒是知道些,就是还是不理解hasnextfloat本身的用法,谢谢
@ben10044: 基本数据类型分为8种
byte int short long 为 整数类型
float double 为 浮点类型
byte < int < float < double
以下三行代码不会报错
byte a = 1;
int b = a;
float c = b;
此时 a 为 byte类型 可以自动升级为 int ,
c 为 int 类型 可以自动升级为 float
这就是为什么会输出小数的原因
@ben10044: 如果你只是想单独的接收 整数类型的数据的话 可以考虑 使用 nextInt
@冬冬呀: 那hasnextfloat()是不是意味着不能判断int类型啊
@ben10044: 对的 这是官方API 提供的方法, 内容是固定的 这个只能用来判断 小数类型的数据, 如果要判断 整数类型的话 可以使用 : hasNextInt
@冬冬呀: 记住了,谢谢冬冬大佬~这疑惑困扰我几天了( Ĭ ^ Ĭ )