为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

回首忆惘然 2023-11-01 16:43:22
在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();
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

扫描仪的文档说:

next() 和 hasNext() 方法及其基元类型伴随方法(例如 nextInt() 和 hasNextInt())首先跳过与分隔符模式匹配的任何输入,然后尝试返回下一个标记。hasNext 和 next 方法都可能阻塞等待进一步的输入

也就是说,当您在hasNextInt()循环的第一次迭代开始时进行调用时while,程序会等待一些输入。因为它正在等待,所以它永远不会到达您的第一个System.out.print语句,直到输入第一个整数之后。


查看完整回答
反对 回复 2023-11-01
?
噜噜哒

TA贡献1784条经验 获得超7个赞

该调用.hasNextInt()无法回答您提出的问题(“流中是否有下一个标记?如果有,它是否可以解析为 int?”),直到用户键入某些内容。

一般来说,我建议不要使用任何方法has。就在while(true)这里吧。

大概您想要一种让用户停止输入数字的方法;您可以使用一些表示“好吧,我完成了”的哨兵数字(例如,-1),或者如果这不是一个选项,请使用.next()代替.nextInt(),并检查输入的文本是否为DONE或其他内容。如果是,break;如果不是,int number = Integer.parseInt(text).


查看完整回答
反对 回复 2023-11-01
  • 2 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信