2017-08-25 93 views
0

爲什麼如果有InputMismatchException,這段代碼會繼續循環? 當你輸入一個零時,catch可以工作,但是如果你輸入一個字符串,循環就會變成無限的。如果存在InputMismatchException,爲什麼此代碼會繼續循環?

import java.util.*; 
public class TryCatch 
{ 
    public static void main(String args[])  
    {  
     int age, age2, sum;   
     boolean repeat=true;   

     Scanner input = new Scanner(System.in);     
     do 
     {    
      try 
      { 
       System.out.println("Enter age: ");    
       age = input.nextInt();    
       System.out.print("Enter age2: ");    
       age2 = input.nextInt();     
       sum = age/age2;    
       System.out.print(sum);   
       repeat=false; 
      }   
      catch (Exception e) 
      {   
       System.out.println("Your error is "+e+"\n Try again");     
      }  
     }  
     while(repeat == true); 
    } 
} 
+1

來吧格式雅編寫雅野蠻人 –

回答

0

澄清後,在編輯評論:

掃描儀認爲,導致異常的價值,這就是爲什麼它是在下面的循環再次觸發。

要獲得你所追求的,你需要重新掃描的內容,並移動到下一個輸入,所以改變你的catch塊這樣的:

 catch (Exception e) 
     {   
      System.out.println("Your error is "+e+"\n Try again"); 
      input.reset(); 
      input.next(); 
     }  

OLD:

因爲當異常情況發生(不是輸入中的int),程序將跳過try塊中的其餘代碼(當然還有停止循環的部分),然後在catch塊中執行代碼,在該代碼塊中只輸出錯誤消息。

在catch體中,您需要設置repeat=false;以使while指令停止重複。

+0

如果我把重複=假;在釣魚體內,循環停止。問題是,它不會嘗試再次接受值。我想要的是,如果有類型不匹配,它會顯示錯誤,然後提示輸入另一個輸入,直到它變爲有效。 – gendave

+0

ahhhh,現在它是有道理的。我會編輯我的答案,然後.. – BeerBaron

+0

謝謝。有效。還有其他解決方案,我發現。 age = Integer.parseInt(input.nextLine()); 2.在try體內創建Scanner類的輸入對象。 – gendave

0

要正確得重數量,如何

int result = Integer.parseInt(number) 

您創建一個整數對象,如果你的輸入可能是10A,就會拋出NumberFormatException

+0

「數字」代表什麼?我看到了另一個解決我的問題的建議:age = Integer.parseInt(input.nextLine()); – gendave

+0

數字是從你的'掃描儀'的解析值 – 0x45

+0

所以「編號」是「輸入」在我的代碼?這是我認爲解決它的代碼:age = Integer.parseInt(input.nextLine());但仍然存在錯誤。輸入年齡:6 輸入AGE2歲:2 你的錯誤是java.lang.ArithmeticException:/零 再次 嘗試輸入年齡: – gendave