在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
语句,直到输入第一个整数之后。
噜噜哒
TA贡献1784条经验 获得超7个赞
该调用.hasNextInt()
无法回答您提出的问题(“流中是否有下一个标记?如果有,它是否可以解析为 int?”),直到用户键入某些内容。
一般来说,我建议不要使用任何方法has
。就在while(true)
这里吧。
大概您想要一种让用户停止输入数字的方法;您可以使用一些表示“好吧,我完成了”的哨兵数字(例如,-1),或者如果这不是一个选项,请使用.next()
代替.nextInt()
,并检查输入的文本是否为DONE
或其他内容。如果是,break;
如果不是,int number = Integer.parseInt(text)
.
添加回答
举报
0/150
提交
取消