Array1
имеет три строки и пять столбцов.Глядя на желаемый результат, должно быть три значения.Ваш код работает строка за строкой.Но переменные rowMax
и columnMax
устанавливаются для всего массива, а не для каждой строки или каждого столбца.Таким образом, они устанавливаются на максимальное значение таблицы, равное 99
.Поскольку это значение появляется уже в первой строке, и вы печатаете максимальное число для каждой строки, оно никогда не меняется на более высокое значение.
Используя потоки Java8 +, мы можем упростить логику с помощью метода IntStream.max
,Мы можем разбить общую задачу на две меньшие задачи: найти максимум в строке и найти максимум в столбце.
protected static int getMaxOfRow(int[][] table, int row) {
return Arrays.stream(table[row]).max().getAsInt();
}
protected static int getMaxOfColumn(int[][] table, int column) {
return IntStream.range(0, table.length).map(i -> table[i][column]).max().getAsInt();
}
На основании этого мы можем определить метод для получения максимума строкии столбец с определенным индексом:
protected static int getMaxOfRowColumn(int[][] table, int index) {
return Math.max(getMaxOfRow(table, index), getMaxOfColumn(table, index));
}
Применение по вашему примеру:
public static void main(String[] args) {
int[][] table = new int[3][];
table[0] = new int[] { 99, 28, 45, 62, 89 };
table[1] = new int[] { 41, 85, 22, 12, 20 };
table[2] = new int[] { 10, 11, 15, 13, 90 };
for (int i = 0; i < table.length; i++) {
int max = getMaxOfRowColumn(table, i);
System.out.println(max);
}
}
Вывод:
99
85
90
РЕДАКТИРОВАТЬ:
ЕслиВы не хотите использовать Stream
, просто реализуйте первые два метода, используя цикл for.Вы по-прежнему сохраняете читабельный дизайн.
protected static int getMaxOfRow(int[][] table, int row) {
int[] r = table[row];
int max = r[0];
for (int i = 1; i < r.length; i++) {
if (max < r[i]) {
max = r[i];
}
}
return max;
}
protected static int getMaxOfColumn(int[][] table, int column) {
int max = table[0][column];
for (int i = 1; i < table.length; i++) {
if (max < table[i][column]) {
max = table[i][column];
}
}
return max;
}
Обратите внимание: для этого кода требуется массив по крайней мере с одной строкой и одним столбцом.Неинициализированный массив или пустой массив или массив с пустой строкой вызовет исключение.