我有一個菜單,其中整數零到六有不同的操作。如果用戶輸入正確,它會成功執行操作并再次要求輸入以執行下一個操作。要退出程序菜單,用戶輸入必須為 6。如果收到任何無效輸入,它會打印“無效選項”并重新打印要求輸入。我的代碼是:int menuSelection;Scanner reader = new Scanner(System.in); // Reading from System.indo{ System.out.println("Enter a number: "); if (reader.hasNext(Pattern.compile("^[0-6]$"))) { menuSelection = reader.nextInt(); } else { System.out.println("Invalid option"); reader.next(); }} while(menuSelection != 6);//once finishedreader.close();我的輸出是:Enter a number: 1Enter a number: 2Invalid optionEnter a number: 3Invalid optionEnter a number: 4Invalid optionEnter a number: 5Invalid optionEnter a number: 6Invalid optionEnter a number: 7Invalid optionEnter a number: 8Invalid optionEnter a number: pancakeInvalid optionEnter a number: 所以它正確地處理了我給它的第一個輸入,但在那之后,它陷入了無限循環,因為它總是認為我的輸入不正確。我的邏輯是有一個 do while 只要menuSelection不是 6就總是重復,因為這是程序將永遠退出的唯一時間,其他一切都應該循環回到等待輸入。所以然后在 do while 循環中我希望我可以在那里進行錯誤檢查,確保輸入在 0-6 的范圍內并且也是嚴格的整數類型,否則在不執行操作的情況下再次通過循環(這不是t 實際上已編碼到 if 塊中)。我對 Java 還很陌生,所以我不是最熟悉 Scanner 以及它如何處理驗證的人。我想我的問題是,是什么導致我的其他輸入無效?
1 回答

慕斯王
TA貢獻1864條經驗 獲得超2個贊
檢查您的正則表達式。嘗試:
if (reader.hasNext(Pattern.compile("[0-6]"))) {
menuSelection = reader.nextInt();
}
這意味著,當檢測到模式[0-6](0 到 6 之間的任何數字)時,它會按您的預期工作。
[編輯]
正如cricket_007建議的那樣,我最后刪除了{1}(僅一次)。
[/編輯]
例子:
Enter a number:
sdf
Invalid option
Enter a number:
3
Enter a number:
2
Enter a number:
1
Enter a number:
5
Enter a number:
8
Invalid option
Enter a number:
6
添加回答
舉報
0/150
提交
取消