Похоже, что с третьего по седьмой if
с должно быть else if
с. Рассмотрим случай a=b=0
: первый if
выполняется, второй пропускается, но третий выполняется снова и выдает ошибку, поскольку a-1
не является допустимой строкой. В качестве примечания, это также может напечатать сообщение несколько раз для данного элемента.
Если ваша цель - найти элементы, которые строго больше, чем их (до) четырех соседей, могу я предложить заполнить матрицу с очень большими значениями? Это избавит от всех проверок и значительно сократит код. Что-то вроде:
int[][] table = new int[row + 2][row + 2];
for (int i = 0; i < row + 2; i++) {
table[0][i] = table[row + 1][i] = 100;
table[i][0] = table[i][row + 1] = 100;
}
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= row; j++) {
table[i][j] = (int)(Math.random() * 100);
}
}
// ... print the matrix (skipped for brevity) ...
for (int i = 1; i <= row; i++) {
for (int j = 1; j <= row; j++) {
if (table[i][j] > table[i][j - 1] &&
table[i][j] > table[i - 1][j] &&
table[i][j] > table[i][j + 1] &&
table[i][j] > table[i + 1][j]) {
System.out.println(table[i][j] + " is a peak");
}
}