2013-07-24 43 views
0

我對代碼中的catch語句之後做了些什麼感到困惑。在循環中引發異常並捕獲後,循環變得無限。我還發現,輸入一個非常長的序列(+10左右)的數字將導致循環無限。我在java中的異常處理方面相當新,所以詳細描述會非常有教育意義。在捕獲異常後怎麼辦困惑

public static void main(String[] args) 
{ 
    boolean cont = false; 

      while (!cont) 
     { 
      addInputNumber(); 
      cont = tryAgain(); 
     } 
} 


    private static void addInputNumber() 
    { 
    boolean valid; 
    int total; 
    int inputInt; 
    @SuppressWarnings("resource") 
    Scanner input = new Scanner(System.in); 

    do 
    { 
     try 
     { 
      System.out.print("Enter a number(between 0 and 1000)"); 
      inputInt = input.nextInt(); 

      if(inputInt > 0 && inputInt < 1000) 
       { 
        valid = true; 

        total = (inputInt % 10) + ((inputInt/10) % 10) + (inputInt/100); 

        System.out.println("\n" + "The total of " + inputInt + " is " + total); 
       } 

      else 
       { 
        System.out.println("\n" + "ERROR---ENTER A NUMBER BETWEEN 0 AND 1000" + "\n"); 
        valid = false; 
       } 
     } 

     catch(InputMismatchException ex) 
     { 
      System.out.println("\n" + "ERROR---ENTER A NUMBER BETWEEN 0 AND 1000" + "\n"); 
      valid = false; 
     } 
    } while(!valid); 
} 
+0

在捕獲塊中將有效更改爲true。 – Veera

回答

0

變化

catch(InputMismatchException ex) 
    { 
     System.out.println("\n" + "ERROR---ENTER A NUMBER BETWEEN 0 AND 1000" + "\n"); 
     valid = true; 
    } 
+0

現在如果無限循環會在異常拋出時停止 –

0

在catch塊,你的變量有效設置爲false。 然後在代碼

while(!valid) 

的條件將是真實的,並且循環去無限

0

你do while循環必須

​​

結束,因爲,一旦你捕獲異常validfalse,你可能想要退出循環,如果發現異常

+0

在拋出異常不良後迭代循環? – Bbvarghe

+0

我不會說它不好,除非你不完全控制你在做什麼。如果你有這樣的要求,你必須這樣做 – sanbhat

0

什麼是方法tryAgain()呢? 它看起來像它叫addInputNumber(),對吧?如果是這樣,您不需要在方法addInputNumber()中的循環。 我認爲你的問題不是在catch塊中做什麼,而是在於程序結構。你正在使用兩個循環,而你可能只需要一個循環。你可以讓addInputNumber()返回一個布爾值。