第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何使用掃描器處理由無效輸入(InputMisameException)引起的無限循環(huán)

如何使用掃描器處理由無效輸入(InputMisameException)引起的無限循環(huán)

慕慕森 2019-06-03 17:23:22
如何使用掃描器處理由無效輸入(InputMisameException)引起的無限循環(huán)所以,我被這段代碼卡住了:import java.util.InputMismatchException;import java.util.Scanner;public class ConsoleReader {     Scanner reader;     public ConsoleReader() {         reader = new Scanner(System.in);         //reader.useDelimiter(System.getProperty("line.separator"));     }     public int readInt(String msg) {         int num = 0;         boolean loop = true;         while (loop) {             try {                 System.out.println(msg);                 num = reader.nextInt();                 loop = false;             } catch (InputMismatchException e) {                 System.out.println("Invalid value!");             }          }         return num;     }}這是我的輸出:插入整數:無效值!插入整數:無效值!...
查看完整描述

4 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

根據javadoc掃描儀:

當掃描器拋出InputMisameException時,掃描器將不會傳遞導致異常的令牌,從而可以通過其他方法檢索或跳過該令牌。

這意味著如果下一個令牌不是int,它拋出InputMismatchException但象征性的留在那里。所以在循環(huán)的下一次迭代中,reader.nextInt()再次讀取相同的令牌并再次拋出異常。你需要的是使用它。加一個reader.next()在你的catch若要使用令牌,則該令牌無效,需要丟棄。

...} catch (InputMismatchException e) {
    System.out.println("Invalid value!");
    reader.next(); // this consumes the invalid token}


查看完整回答
反對 回復 2019-06-03
?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

我要做的是使用Scaner.nextLine()在整行中閱讀。然后創(chuàng)建另一個讀取返回字符串的掃描器。

String line = reader.nextLine();Scanner sc = new Scanner(line);

這將使您的示例函數如下所示:

  public int readInt(String msg) {
        int num = 0;
        boolean loop = true;

        while (loop) {
            try {
                System.out.println(msg);
                String line = reader.nextLine();
                Scanner sc = new Scanner(line);
                num = sc.nextInt();   
                loop = false;
            } catch (InputMismatchException e) {
                System.out.println("Invalid value!");

            } 
        }
        return num;
    }

這樣,你就有一個掃描器來獲取輸入,另一個來驗證它,這樣你就不用擔心讀者是否關心他們是否輸入了正確的輸入形式。


查看完整回答
反對 回復 2019-06-03
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

你的自行其是“循環(huán)”變量。

在代碼到達賦值循環(huán)=false之前拋出的異常本身;準確地說,異常是在前面的語句(num=reader.nextInt()中拋出的;

當拋出異常時,“循環(huán)”變量的值為“true”,但您的代碼會跳轉到捕捉塊,然后重復while-do。這個時間-做永遠不會停止,因為下一次迭代將再次拋出一個異常,跳到捕獲塊,等等。

要終止這個What-do,您需要使用另一個邏輯操作來保護自己的時間,例如:

  1. 讀取器獲得非int字符時退出
  2. EOF時退出

這可以在CATCH塊或其他行中完成。但精確的解決方案取決于您的規(guī)格。


查看完整回答
反對 回復 2019-06-03
  • 4 回答
  • 0 關注
  • 690 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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