2017-02-17 59 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數組)會給出數字列。