我是一个写入程序,从另一个数组中分割出一个数组,这个程序也覆盖了程序中可能发生的问题的异常。程序中的问题是输出不按顺序。我需要打印出这样的结果:
before division start-
program is proessing 2-
division by zero-
program is proessing 10-
program is proessing 15-
.....
如果您编译代码,您会看到答案已经搞砸了。
public class exception {
public static void main (String args[]){
//int[]pooya =new int[10];
int[] pooya={20,4,80,75,48,30};
int[]java={10,0,8,5,12,3,78,2,12};
System.out.println("beofore division start");
for(int i=0;i<=pooya.length;i++){
for(int x=0;x<=java.length;x++){
try{
int y=pooya[i]/java[x];
System.out.println("program is prossing "+y);
}
catch(ArithmeticException poo){
System.out.println("division by zero");
}
catch(ArrayIndexOutOfBoundsException po){
System.out.println("item is not match");
}
}
}
}
}
&#13;
`
答案 0 :(得分:0)
现在你的程序逻辑没有遵循预期结果中的逻辑。 您正在使用嵌套的for-cycle,其行为如下:
另一件事是,在你的for循环中,你超出了数组的大小,导致你的 ArrayIndexOutOfBoundsException 异常。
int[] pooya = {20, 4, 80, 75, 48, 30}
此数组的长度为6,但索引从0开始,表示您有有效元素 pooya [0],pooya [1],pooya [2],pooya [3],pooya [4 ]和 pooya [5] - 六个要素。调用pooya [6]会导致 ArrayIndexOutOfBoundsException 异常。这就是为什么你应该从你的for循环定义中删除你的等号,因为我永远不应该达到6:
for (int i = 0; i < pooya.length; i++)
如果您想获得数组描述的结果
int[] pooya = {20, 4, 80, 75, 48, 30};
int[] java = {10, 0, 8, 5, 12, 3, 78, 2, 12};
然后你应该重构你的代码只使用一个周期,如下所示:
int[] pooya = {20, 4, 80, 75, 48, 30};
int[] java = {10, 0, 8, 5, 12, 3, 78, 2, 12};
System.out.println("Before division start");
for (int i = 0; i < pooya.length; i++) {
try {
int y = pooya[i] / java[i];
System.out.println("Program is processing " + y);
} catch (ArithmeticException poo) {
System.out.println("Division by zero");
} catch (ArrayIndexOutOfBoundsException po) {
System.out.println("Item is not match");
}
}
使用此实现,您将获得20 / 10,4 / 0,80 / 8,75 / 5,48 / 12和30/3的结果,然后它将无法继续,因为第一个元素中没有更多元素要用于除法的数组,您不需要用于 ArrayIndexOutOfBoundsException 的catch。