if(scanner.hasNext())的个人理解

这里先用一段代码展示

import java.util.Scanner;
public class hello {
    
    
    public static void main(String[] args) {
    
    
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入一个数");
        if(scanner.hasNextInt())/*判断下一个输入的数据是否属于int类型,
        如果条件为真,执行if内语句*/                  
        {
    
    
            int i = scanner.nextInt();//将输入的值赋值给int类型 i
            System.out.println("输出的整数为: "+i);
        }
        if(scanner.hasNextFloat())/*判断下一个输入的数据是否属于float
        类型,如果条件为真,则执行if内语句*/
        {
    
    
            float f = scanner.nextFloat();/*将输入的值赋值给float类型 f,
            并将其自动转化为float类型输出*/
            System.out.println("输出的小数为: "+f);
        }
        scanner.close();//凡是属于I/O流的类如果不关闭就会一直占用资源
    }
}

代码执行结果:
运行结果

  • 不理解的问题
    为什么输入一个整数后再输入一个整数,第二个整数会转化成float类型,如果 “if(scanner.hasNextInt())/判断下一个输入的数据是否属于int类型,如果条件为真,执行if内语句/ ” 这句话是对的,它又为什么会进入第二个if语句?
  • 现在的思路:关于if(scanner.hasNextInt())的解释应该是正确的,但是if(scanner.hasNextFloat())中对float类型的判定应该是兼容了int类型,即int类型的整数也属于float类型,才会导致整数也能进入第二个if语句
  • 至于为什么输入的数字为小数时,会直接跳过第一个循环,是因为不满足第一个if语句的条件但是满足第二个if语句的条件,直接跳过第一个if语句执行第二个if语句,程序一般情况下时自上而下执行的

另外补充的是,float i =10;这句话是对的,在输出时将会自动转化为10.0

猜你喜欢

转载自blog.csdn.net/qq_41017444/article/details/112546989