亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 do while 循環中正確使用 Scanner.next(Pattern pattern)

在 do while 循環中正確使用 Scanner.next(Pattern pattern)

胡說叔叔 2021-10-13 11:03:31
我有一個菜單,其中整數零到六有不同的操作。如果用戶輸入正確,它會成功執行操作并再次要求輸入以執行下一個操作。要退出程序菜單,用戶輸入必須為 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


查看完整回答
反對 回復 2021-10-13
  • 1 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號