0

下面的代碼詢問用戶他/她想要多少賽車手。Try-Catch While While

while (true) { // loops forever until break 
    try { // checks code for exceptions 
     System.out.println("How many racers should" + " participate in the race?"); 
     amountRacers = in.nextInt(); 
     break; // if no exceptions breaks out of loop 
    } 
    catch (InputMismatchException e) { // if an exception appears prints message below 
     System.err.println("Please enter a number! " + e.getMessage()); 
     continue; // continues to loop if exception is found 
    } 
} 

如果amoutnRacers = in.nextInt();代碼,跳出循環和程序的其它部分細運行輸入數字;然而,當我輸入諸如「awredsf」之類的東西時,它應該捕捉到它的異常。而不是再次提示用戶它會不斷循環,這對我來說是沒有意義的。

多少車手應該參與到比賽中:

不斷循環時,程序打印這樣嗎? 有多少車手參加比賽? 有多少車手參加比賽? 有多少車手參加比賽? 有多少車手參加比賽? 有多少車手參加比賽? 有多少車手應該參加比賽?請輸入一個數字! null 請輸入一個數字! null 請輸入一個數字! null 請輸入一個數字! null 請輸入一個數字! null 請輸入一個數字! null 請輸入一個數字!空 ...

我不明白是怎麼回事amountRacers = in.nextInt();所以爲什麼用戶無法輸入數字?

+1

基本上,你一次又一次地得到異常。這大概是因爲錯誤的輸入仍然在等待閱讀。 –

回答

7

只要添加input.next()一旦你捕獲InputMismatchException。

catch (InputMismatchException e) { //if an exception appears prints message below 
    System.err.println("Please enter a number! " + e.getMessage()); 
    input.next(); // clear scanner wrong input 
    continue; // continues to loop if exception is found 
} 

您需要清除錯誤的輸入,哪個掃描儀自動沒有。

+0

感謝您接受幫助答案。 – Rhendz

+0

我知道這是因爲時間限制。 – Rhendz

+0

爲什麼'繼續'是必要的?這只是java的怪癖嗎? – ycomp

0

您可能需要創建一個Scanner類以獲取通過鍵盤輸入的標準輸入。你應該在你的代碼中有一個聲明創建一個Scanner類的實例,如:Scanner in = new Scanner(System.in); 所以你的語句中的「in」變量:amountRacers = in.nextInt();等待並掃描鍵盤輸入的輸入並存儲它。

+0

這只是我已經實例化Scanner對象的一段代碼。 – Rhendz

0

今天我解決了這個問題:-)這是我的代碼。我認爲我的幫助

public int choice() throws Exception{ 
    Scanner read = new Scanner(System.in)); 
    System.out.println("Choose the option from the upper list"); 
    int auxiliaryChoiceMenu = 5; 
    int auxiliaryVariable = -1; 
    boolean auxiliaryBoolean = false; 
    while (!auxiliaryBoolean) { 
     try { 
      auxiliaryVariable = read.nextInt(); 
      read.nextLine(); 
     } catch (Exception e) { 
      System.out.println("incorrect data, try again"+e); 
      read.nextLine(); 
      continue; 
     } 

     if (auxiliaryVariable<0 || auxiliaryVariable>auxiliaryChoiceMenu){ 
      System.out.println("incorrect data, try again"); 
     } else { 
      auxiliaryBoolean = true; 
     } 
     choiceMenu = auxiliaryVariable; 

    } 
     return choiceMenu; 
     //choicemenu is a external variable 
}