[英]Why does this code keep looping and flooding the terminal when the input is not an integer?
這是代碼:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("Number: ");
if (scanner.hasNextInt()) {
System.out.println(scanner.nextInt());
break;
} else {
System.out.println("Not an integer.");
}
}
scanner.close();
}
當值為 integer 時,一切正常,循環中斷,但是當輸入不是 integer 時,我一直看到這個無限淹沒終端:
Number: Not an integer.
Number: Not an integer.
Number: Not an integer.
...
...
...
將Scanner.hasNextInt()與Scanner.nextInt()結合使用時發生這種情況的原因是, nextInt()方法不會消耗掃描儀緩沖區中的 ENTER 鍵擊(當您輸入數字時),因此此 ENTER 不斷獲取無限期地玩。 您需要將其從掃描儀緩沖區中清除(可以這么說),為此,您需要執行以下操作:
} else {
System.out.println("Not an integer.");
scanner.nextLine(); // Clear Scanner buffer.
}
我只使用Scanner.nextLine()的另一個原因;)。
哦...不要關閉掃描儀 object,除非您確定您的應用程序已完成,否則您將無法再次使用它,直到您重新啟動應用程序。 當應用程序關閉時,它會自動關閉並收集垃圾。
if (scanner.hasNextInt()) {
System.out.println(scanner.nextInt());
break;
}
因為scanner.hasNextInt ()正在尋找Integer 輸入,如果輸入是integer,它會打印它的值並中斷( break 語句)while 循環(即退出循環),否則它會繼續掃描Z157DB7ZDF530023575E8D3666 輸入。
此外,您在 while 循環中使用條件true ,這意味着循環將繼續無限執行,直到我們中斷它。
這僅僅是因為:
while(true)
無論如何都不好)。如果您的掃描儀 object 無法識別 integer 輸入,則您已進入無限循環。 由於 else{} 塊內沒有“中斷”,因此它將無限次循環並淹沒終端。 插入一個“break;” 在打印語句之后
添加break;
在 else 括號內的 System.out 之后,因此一旦遇到非整數輸入,您就可以中斷循環。
while(true)
{
if(Something) // What Ever
{
break;
}
}
System.out.println("Something Happened");
所以如果發生了什么事,你會看到Something Happened Once。
編輯:如果您希望它重復詢問,請按以下方式更改:
public static void main(String[] args) {
Scanner scanner;
while (true) {
scanner= new Scanner(System.in);
System.out.print("Number: ");
if (scanner.hasNextInt()) {
System.out.println(scanner.nextInt());
break;
} else {
System.out.println("Not an integer.");
}
}
scanner.close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.