[英]While loop using Scanner method hasNext() fails to loop, exits unexpectedly
[英]Infinity while loop on using scanner hasNext method
我為一家餐廳創建了一個 JDBC 項目......問題是它會無限循環......我不知道該怎么做,我已經研究了幾天。 我得到的唯一解決方案是掃描器hasNext
方法,但它也不起作用!!!
package com.restaurant.orders;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("WELCOME TO UR RESTAURANT");
System.out.println("PLEASE, PLACE UR ORDER: ");
ManageOrders.PlaceOrder();
System.out.println("ANYTHING ELSE???");
Scanner scanner=new Scanner(System.in);
boolean c=true;
while(true) {
System.out.println("1. CancleOrder");
System.out.println("2. CancleDish");
System.out.println("3. ReplaceDish");
System.out.println("4. DisplayOrderDetails");
System.out.println("5. Nothing, Thank you!!");
if(scanner.hasNextInt()) {
int ch=scanner.nextInt();
switch(ch) {
case 1:ManageOrders.CancleOrder();break;
case 2:ManageOrders.CancleDish();break;
case 3:ManageOrders.ReplaceDish();break;
case 4:ManageOrders.DisplayorderDetails();break;
case 5:c=false;break;
}
}
if(c==false) {
break;
}
else {
continue;
}
}
scanner.close();
}
}
您需要以這種方式獲取用戶輸入:
package com.restaurant.orders;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("WELCOME TO UR RESTAURANT");
System.out.println("PLEASE, PLACE UR ORDER: ");
ManageOrders.PlaceOrder();
System.out.println("ANYTHING ELSE???");
Scanner scanner = new Scanner(System.in);
boolean c = true;
while(true) {
System.out.println("1. CancleOrder");
System.out.println("2. CancleDish");
System.out.println("3. ReplaceDish");
System.out.println("4. DisplayOrderDetails");
System.out.println("5. Nothing, Thank you!!");
int ch = scanner.nextInt();
switch(ch) {
case 1:ManageOrders.CancleOrder();break;
case 2:ManageOrders.CancleDish();break;
case 3:ManageOrders.ReplaceDish();break;
case 4:ManageOrders.DisplayorderDetails();break;
case 5:c=false;break;
}
if(c==false) {
break;
}
else {
continue;
}
}
scanner.close();
}
}
循環變得無限,因為不知何故在輸入中出現了一個非整數值,因此hasNextInt()
總是false
。
將預期輸入的類型更改為String
並使用hasNext() / next()
讀取字符串值可能是有意義的。
此外,代碼可能會得到改進:
switch
語句缺少default
情況;if/else
語句是多余的,可以刪除;while
循環不應該是無限的,它應該檢查c
的狀態:Scanner scanner=new Scanner(System.in);
boolean run = true;
while (run) {
System.out.println("1. CancelOrder");
System.out.println("2. CancelDish");
System.out.println("3. ReplaceDish");
System.out.println("4. DisplayOrderDetails");
System.out.println("5. Nothing, Thank you!!");
if (scanner.hasNext()) {
String ch = scanner.next();
switch(ch) {
case "1": ManageOrders.CancleOrder(); break;
case "2": ManageOrders.CancleDish(); break;
case "3": ManageOrders.ReplaceDish(); break;
case "4": ManageOrders.DisplayorderDetails(); break;
case "5": run = false; break;
default: System.out.println("Use digits from 1 to 5 please"); break;
}
}
}
System.out.println("Bye");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.