2017-08-13 117 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

谢谢。投票交换:删除投票,提高投票。 –