У меня есть этот метод, который принимает два экземпляра двумерных массивов для их объединения и хранения суммы в новом массиве, два массива должны иметь одинаковый размер, например (те же номера строк и столбцов) если он не должен вызывать исключение, которое я определил. мой метод бросает исключение только в том случае, если первый массив имеет различное количество строк, а не столбцы, например, исключение выбрасывается только при передаче этих массивов: a [4] [4] b [5] [4], но не эти массивы: a [4] [5] b [4] [5], может кто-нибудь объяснить, что происходит? и я правильно выбрал исключение?Исключения 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);
}
Ну, вы просто генерируете исключение, если a.length! = A [0] .length. Поэтому вы даже не сравниваете размер двух внешних массивов. Только если число строк первого массива равно числу столбцов его первой строки. Вам нужно сравнить количество строк двух массивов и количество элементов всех строк из двух массивов. Я также не понимаю, почему массив результатов инициализируется как новый int [a.length] [b.length]. –
@controlaltdel, но его возврат суммы, вот результат консоли: сумма массивов: --------------- | 1 + 1 = 2 | --------------- – Khaled
@ Khhaled Прошу прощения. Я думал, что «второй случай не должен вызывать исключения ...», но это не то, что я написал. В любом случае это похоже на то, что вы нашли – ControlAltDel