首页 新闻 会员 周边

关于scanner.hasNextFloat() 的问题?

0
悬赏园豆:10 [待解决问题]

我输入如下代码:

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("输入的不是小数数据!");
        }
    }
}

运行结果如下:

image-20210723233010164

请问我输入一个整数,为什么会输出小数?scanner.hasNextFloat()不是只读取单精度浮点数吗?

风雪依稀秋白发尾的主页 风雪依稀秋白发尾 | 初学一级 | 园豆:192
提问于:2021-07-23 23:35
< >
分享
所有回答(1)
0

你获取的时候
使用的是 scanner.nextFloat()
所以类型会自动转换,
比如你使用的是 nextInt() 这样的话 读取到的就是 整数了

冬冬呀 | 园豆:204 (菜鸟二级) | 2021-07-30 16:21

但是hasnextfloat那里输入一个整数2它就已经认为是正确的了

支持(0) 反对(0) ben10044 | 园豆:197 (初学一级) | 2022-03-31 11:22

@ben10044: 是的 hasNextFloat 是用来判断 你输入的值, 此时已经是转换好了的数据了

支持(0) 反对(0) 冬冬呀 | 园豆:204 (菜鸟二级) | 2022-03-31 11:25

@冬冬呀: 我想问下怎么才能熟hasnextfloat能判断整数不是Float类型?另辟蹊径的方法我倒是知道些,就是还是不理解hasnextfloat本身的用法,谢谢

支持(0) 反对(0) ben10044 | 园豆:197 (初学一级) | 2022-03-31 11:27

@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

这就是为什么会输出小数的原因

支持(0) 反对(0) 冬冬呀 | 园豆:204 (菜鸟二级) | 2022-03-31 11:40

@ben10044: 如果你只是想单独的接收 整数类型的数据的话 可以考虑 使用 nextInt

支持(0) 反对(0) 冬冬呀 | 园豆:204 (菜鸟二级) | 2022-03-31 11:42

@冬冬呀: 那hasnextfloat()是不是意味着不能判断int类型啊

支持(0) 反对(0) ben10044 | 园豆:197 (初学一级) | 2022-03-31 11:42

@ben10044: 对的 这是官方API 提供的方法, 内容是固定的 这个只能用来判断 小数类型的数据, 如果要判断 整数类型的话 可以使用 : hasNextInt

支持(0) 反对(0) 冬冬呀 | 园豆:204 (菜鸟二级) | 2022-03-31 11:44

@冬冬呀: 记住了,谢谢冬冬大佬~这疑惑困扰我几天了( Ĭ ^ Ĭ )

支持(0) 反对(0) ben10044 | 园豆:197 (初学一级) | 2022-03-31 11:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册