2017-02-17 58 views
0

我有这种方法,它采用二维数组的两个实例将它们添加在一起,并将总和存储在一个新的数组中,两个数组必须具有相同的大小,例如。(相同的行和列号)如果不是,它应该抛出我定义的异常。我的方法抛出异常只有当第一个数组具有不同数量的行而不是列时,例如只有当我传递这些数组时,才会抛出异常:a [4] [4] b [5] [4]但不是这些数组:a [4] [5] b [4] [5],有人可以解释什么是happing?我正在以正确的方式抛出异常?JAVA异常与阵列

public int[][] add(int[][] a, int[][] b) throws IncompatibleArgumentsException { 
    int[][] sum = new int[a.length][b.length]; 

    if (a.length == b.length) { 
     System.out.println("The Sum of the arrays is: "); 
     System.out.println(" --------------- "); 
     for (int row = 0; row < a.length; row++) { 
      for (int col = 0; col < b.length; col++) { 
       sum[row][col] = a[row][col] + b[row][col]; 

       System.out.println(" | " + a[row][col] + " + " + b[row][col] + " = " + sum[row][col] + " | "); 
       System.out.println(" --------------- "); 
      } 
     } 
    } else { 
     throw new IncompatibleArgumentsException("Arrays have different size"); 
    } 

    return sum; 
} 

,这是怎么了调用该方法:

public Implementation() { 

    int[][] x = new int[1][1]; 
    x[0][0] = 1; 

    int[][] y = new int[1][2]; 
    y[0][0] = 1; 
    y[0][1] = 3; 

    add(x, y); 
} 
+0

那么,你只会抛出一个异常,如果a.length!= a [0] .length。所以你甚至不会比较两个外部数组的大小。只有第一个数组的行数等于第一行的列数。您需要比较两个数组的行数和两个数组中所有行的元素数。我也不明白为什么结果数组被初始化为新的int [a.length] [b.length]。 –

+0

@controlaltdel但它返回的总和,这里是控制台结果:数组的总和是: --------------- | 1 + 1 = 2 | --------------- – Khaled

+0

@Khaled我道歉。我在想,“第二个案例不应该引起例外......”但这不是我写的。在任何情况下,它似乎与你找到的 – ControlAltDel

回答

1

您有错误检查。你应该就在上面做什么:

if (a.length != b.length || a[0].length != b[0].length) { 
    throw new IncompatibleArgumentsException(...); 
} 
+0

谢谢先生,你做到了。还有一个问题可以建议我怎样才能让我通过更动态的数组传递更多的列和行,并使用for循环或更好的方法设置它们的值? – Khaled

+0

@Khaled,你可以发表一个新问题 – FSm

0

a.length”给你的行数本质上是一个2-d数组是1-d数组的数组,所以a.'length”只会给你'a'中一维数组的数量。为了匹配列的数量,你需要找出在a的单个一维数组中有多少个元素,因此a[0].length(其中a [0] = a中的第0个1-d数组)会给出数字列。