在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
提交
取消