为什么 while 循环中会跳过第一条语句?

在While循环中,为什么第一次跳过第一个打印语句(要求用户输入数字)?我认为这是因为我不明白 hasNextInt() 方法是如何工作的,我尝试过并阅读了它,但实际上并没有走得太远。


最简单的解决方案是将一个 print 语句放在循环之外,我尝试过并且它有效,但我只想知道为什么在第一次迭代中跳过该语句。


Scanner scanner = new Scanner(System.in);

        int max = Integer.MIN_VALUE;

        int min = Integer.MAX_VALUE;

        int number;

        while(scanner.hasNextInt()) {

            System.out.print("Enter a number: ");

            number = scanner.nextInt();

            scanner.nextLine();

            max = Math.max(max,number);

            min = Math.min(min,number);

        }


        System.out.println("Max number is "+max);

        System.out.println("Min number is "+min);

        scanner.close();


回首忆惘然
浏览 73回答 2
2回答

跃然一笑

扫描仪的文档说:next() 和 hasNext() 方法及其基元类型伴随方法(例如 nextInt() 和 hasNextInt())首先跳过与分隔符模式匹配的任何输入,然后尝试返回下一个标记。hasNext 和 next 方法都可能阻塞等待进一步的输入也就是说,当您在hasNextInt()循环的第一次迭代开始时进行调用时while,程序会等待一些输入。因为它正在等待,所以它永远不会到达您的第一个System.out.print语句,直到输入第一个整数之后。

噜噜哒

该调用.hasNextInt()无法回答您提出的问题(“流中是否有下一个标记?如果有,它是否可以解析为 int?”),直到用户键入某些内容。一般来说,我建议不要使用任何方法has。就在while(true)这里吧。大概您想要一种让用户停止输入数字的方法;您可以使用一些表示“好吧,我完成了”的哨兵数字(例如,-1),或者如果这不是一个选项,请使用.next()代替.nextInt(),并检查输入的文本是否为DONE或其他内容。如果是,break;如果不是,int number = Integer.parseInt(text).
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java