[英]my codes goes infinity loop and does not prompts the user anymore
boolean acceptPcode=true;
boolean acceptQty=false;
int Qty=0;
List<Integer> purchasedProdQty=new ArrayList<>();
while(acceptPcode==true && acceptQty==false){
do{
try{
System.out.print("Enter Qty: ");
Qty=sc.nextInt();
acceptQty=true;
}catch(InputMismatchException ime){
System.out.println("Invalid quantity please enter a number!");
acceptQty=false;
}
if(acceptQty==true)
purchaseProdQty.add(Qty);
}while(acceptQty==false);
}
我的問題是,當我輸入一個字母時,它進入一個無限循環,它不會提示用戶輸入數量....這是
輸入數量:數量無效請輸入數字!
輸入數量:數量無效請輸入數字!
輸入數量:無效數量請輸入數字!......
您忘記閱讀下一行的\\n
(或\\r\\n
)字符。 在您當前的代碼中,掃描程序正在等待int
輸入,當前的下一個輸入是此分隔行char。 只需在代碼中添加sc.nextLine()
即可使用break行char:
Qty=sc.nextInt();
sc.nextLine();
acceptQty=true;
從我可以收集的信息來看,你的掃描儀(sc)似乎正在拋出異常。 這會導致acceptQty一直是假的,讓你陷入內在的do-while循環中。
您需要在異常塊中使用任何非法字符,否則Scanner#nextInt
方法調用將不會使用它們,導致循環無限重復:
} catch(InputMismatchException ime) {
System.out.println
("Invalid quantity: " + sc.nextLine() + " please enter a number ");
...
}
在讀出sc時你會遇到異常,所以它總是進入無限循環。 你可以粘貼sc中的值嗎?
我相信你做錯了。 您的驗證方法非常模糊,可以簡化。 假設您有以下方法:
public int readNumber(final String prompt, final Scanner scanner){
System.out.println(prompt);
try{
return scanner.nextInt();
}catch(Exception ex){
System.err.println("Enter a valid number");
return readNumber(prompt, scanner);
}
}
此方法將打印出提示符(第一個參數)並從提供的Scanner
讀取輸入(第二個參數)。 如果用戶輸入了無法解析為int
,它將調用相同的方法(遞歸)。
取出兩個循環,當您想要從Scanner
讀取int
,請執行以下操作:
int value = readNumber("Enter a quantity", sc);
您肯定知道Integer.MAX_VALUE >= value >= Integer.MIN_VALUE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.