2016-03-21 85 views
3

試圖做一個嘗試捕捉,當我有一些問題做while循環:用於做Java的嘗試捕捉while循環不循環

try{ 
    do { 
     System.out.println("Enter your option: "); 
     choice = sc.nextInt(); 
     switch (choice) { 
      case 1: 
       break; 
      case 2: 
       break; 
      case 3: 
       break; 
      case 4: 
       break; 
      case 5: 
       break; 

     } 
    } while (choice != 6); 
    }catch(InputMismatchException e){ 
     System.out.println("Please enter option between 1-6."); 
    } 

我試圖對事要做,而循環是當用戶輸入除終止的6以外的任何內容,它將繼續提示用戶輸入。對於每種情況,都會採用某種方法。

然後,我試着做一個InputMismatchException的try catch,因爲我的掃描器正在從用戶輸入中取整數。但是,在我輸入字母而不是整數後,程序只是自行終止。我正在嘗試像用戶輸入字母時那樣,它會一直提示用戶輸入正確的信息。

任何想法?提前致謝。

我在想,如果我應該讓另一個做,而包裝整個嘗試趕上?

+1

如果拋出一個異常,那麼它會帶你到你抓這是你的,而循環之外,並因此終止。簡單地把你的try-catch放到你想要捕獲異常的地方,即在for循環中。 – ManoDestra

+0

是的,我根據其中一個答案中的建議轉換了它。但問題是,當用戶輸入字母時,程序給我一個無限循環的「輸入你的選擇:」而不需要用戶輸入 –

+0

只要你重新定義你在輸入中檢查的變量(嘗試中的那個),那麼它將不會是一個「無限」的循環。用戶輸入有效的輸入然後繼續進行將是可行的。另一種方法是根本不使用nextInt,只需從用戶那裏獲取字符串輸入並自己進行驗證,而不是使用try-catch機制。 – ManoDestra

回答

4

不喜歡:

try { 
    choice = sc.nextInt(); 
} catch(InputMismatchException e){ 
     System.out.println("Please enter option between 1-6."); 
     sc.next(); 
     continue; 
    } 

如果用戶輸入一個無效的輸入就會去到catch塊,並會繼續循環。取下外部的try catch塊。它不需要

+0

嗯,這實際上給我無限循環,當用戶輸入字母,選項菜單本身只是保持循環,而不需要用戶輸入。我按照你的建議去掉了外面的try catch,但不幸的是沒有運氣。 –

+1

你的'break'語句適用於'switch'(不是循環),並且當你沒有得到int時(或者令牌會導致無限循環),你需要調用'Scanner.next() 。 –

+0

對不起,你想介紹一些代碼示例嗎?我很困惑 –

0

要處理的字符和的和無效的號碼,你可以做這樣的事情:

do { 
    System.out.println("Enter your option: "); 
    try{ 
     choice = sc.nextInt(); 
    catch(InputMismatchException e){ 
     choice = 0; 
     sc.next(); 
    } 
    switch (choice) { 
     case 1: 
      break; 
     case 2: 
      break; 
     case 3: 
      break; 
     case 4: 
      break; 
     case 5: 
      break; 
     default: 
      System.out.println("Please enter option between 1-6."); 
      break; 
     } 
} while (choice != 6);