2017-08-13 172 views
-4

當我運行程序100是由數字衆說紛紜,但一旦它到達0將出現一條消息,告訴用戶說100不能由0Java中,嘗試捕獲後繼續

分我如何獲得程序在錯誤之後繼續,並將其餘的數字除以100。

這是我當前的代碼:

public class testing { 
    int[] table; 
    int number; 

    public testing(int number) { 
     this.number = number; 
     table = new int[number]; 
    } 

    public static void main(String[] args) { 
     try { 
      int[] numbers = { 2, 3, 0, 4, 5 }; 
      testing division; 
      for (int i = 0; i < 5; i++) { 
       division = new testing(100/numbers[i]); 
       System.out.println("Answer is " + division.number); 
      } 
     } catch (Exception e) { 
      System.out.println("A number cannot be divided by 0"); 
     } 
    } 
} 
+4

請使用提供標準縮進的工具,任何好的IDE都可以。 –

回答

5

你可以簡單地做出更細粒度的規模try/catch語句 - 把它 for循環。

for (int i = 0; i < 5; i++) { 
    try { 
     division = new testing(100/numbers[i]); 
     System.out.println("Answer is " + division.number); 
    } catch (ArithmeticException e) { // avoid catching with the overly broad Exception 
     System.out.println("A number cannot be divided by 0"); 
    } 
} 

我想盡量讓我的例外更具體,避免捕捉使用過度廣泛的Exception類,這裏使用ArithmeticException。

但更重要的是,我完全擺脫了try catch,並簡單地測試了0,完全避免了異常。

for (int i = 0; i < 5; i++) { 
    if (numbers[i] == 0) { 
     System.out.println("A number cannot be divided by 0"); 
    } else { 
     division = new testing(100/numbers[i]); 
     System.out.println("Answer is " + division.number); 
    } 
} 
1

看跌的try-catch中的內:

for (int i = 0; i < 5; i++) { 
    try{ 
    division = new testing(100/numbers[i]); 
    System.out.println("Answer is " + division.number); 
    } catch(Exception e){ 
     System.out.println("A number cannot be divided by 0"); 
    } 
    } 
0

更新代碼:增加了一個嘗試捕捉你的代碼:

public class testing { 

    int[] table; 
    int number; 

    public testing(int number) { 
    this.number = number; 
    table = new int[number]; 
    } 

    public static void main(String[] args) { 
    int[] numbers = { 2, 3, 0, 4, 5 }; 
    testing division; 

    for (int i = 0; i < 5; i++) { 
     try { 
     division = new testing(100/numbers[i]); 
     System.out.println("Answer is " + division.number); 
     } catch (Exception e) { 
     System.out.println("A number cannot be divided by 0"); 
     } 
    } 
    } 
} 
2

,如果出現異常,也沒有辦法去回來,但我們可以處理異常並與下一次迭代一起進行,或者在分割之前的條件下添加以下內容:

**if(numbers[i] != 0){** 
division = new testing(100/numbers[i]); 

或把try try catch在循環中。

+0

「如果發生異常無法返回」 - 這是絕對正確的。如果發生異常,我們只能處理異常並且程序可以繼續前進,在發生異常時它是一個通用語句。在其他例子中,他們在for循環中遞交異常,這意味着如果發生異常,他們正在處理該異常並繼續進行下一次迭代。這樣,如果有多個零元素數組,那麼每次都會拋出異常。 – user2862544

+0

以不同的方式修改了答案 – user2862544

+0

謝謝。投票交換:刪除投票,提高投票。 –