Вы никогда не определяете тип для newI
или newJ
, который может быть зафиксирован предшествующим их объявлению с их предполагаемым типом (например, int
). У вас также есть два `` `перед вашим оператором if, и ваш недостающий закрывающий скобок"} "перед вашим заявлением else. Но это лишь синтаксические ошибки. После исправления этих ошибок вы заметите, что ваш метод не возвращает желаемые результаты.
Посмотрите на свой код, в частности на циклы.
for(int i=0; i< maxRows.length; i++) {
newI += i;
for(int j=0; j< maxRows.length; j++) {
newJ += j;
// other stuff
}
}
Допустим, что maxRows.length
равно 3. Это означает, что внешний цикл будет работать от 0 до 2, так newI
будет равен 3. В то же время для каждой итерации внешний контур делает, внутренний цикл повторяется 3 раза. Таким образом, newJ
в итоге окажется равным 9. Это не тот способ, который нужно суммировать элементы массива. Лучший способ сделать это - перебрать массивы во внешнем цикле и суммировать элементы во внутреннем цикле, а затем сделать сравнение, завершающее внешний цикл. Например:
int largestRow = 0;
int largestSum = 0;
int sum;
// iterate over each array
for(int i=0; i< maxRows.length; i++) {
sum = 0; // set and reset sum to zero
// iterate over each element
for(int j=0; j< maxRows[i].length; j++) {
sum += maxRows[i][j];
}
// if sum is > the previous largest sum then set largest
// sum to this new sum and record which row
if(sum > largestSum) {
largestRow = i;
largestSum = sum;
}
}
return largestRow;
Вот пример того, что вы пытаетесь выполнить.
public class RowSums {
public static void main(String[] args) {
int[][] test = { {1, 5, 7, 0, 9} , {2, 4, 5, 6, 7} , {9, 2, 0, 12, 8, 3} };
System.out.println(printRows(test));
System.out.println("The row with the largest sum is row "
+ findMaxRow(test));
}
public static int findMaxRow(int[][] maxRows){
int largestRow = 0;
int largestSum = 0;
int sum;
// iterate over each array
for(int i=0; i< maxRows.length; i++) {
sum = 0; // set and reset sum to zero
// iterate over each element
for(int j=0; j< maxRows[i].length; j++) {
sum += maxRows[i][j];
}
// if sum is > the previous largest sum then set largest
// sum to this new sum and record which row
if(sum > largestSum) {
largestRow = i;
largestSum = sum;
}
}
return largestRow;
}
public static String printRows(int[][] rows) {
StringBuilder s = new StringBuilder("Rows and their sums:\n");
int sum;
for(int x = 0; x < rows.length; x++) {
s.append("Row [" + x + "] = [ ");
sum = 0;
for(int y = 0; y < rows[x].length; y++) {
s.append(rows[x][y] + " ");
sum += rows[x][y];
}
s.append("]\n");
s.append("Row [" + x + "]'s sum is " + sum + "\n");
}
return s.toString();
}
}
Выход:
Rows and their sums:
Row [0] = [ 1 5 7 0 9 ]
Row [0]'s sum is 22
Row [1] = [ 2 4 5 6 7 ]
Row [1]'s sum is 24
Row [2] = [ 9 2 0 12 8 3 ]
Row [2]'s sum is 34
The row with the largest sum is row 2
У вас есть два "'" перед вашим' if' заявления, и ваше отсутствие закрывающей скобки "}" перед вашей 'else' заявления. Кроме того, в вашем коде 'newI' никогда не будет больше, чем' newJ', так как 'newI' будет добавлять значение' i' 'maxRows.length' раз, а' newJ' добавит значение 'j'' maxRows.length'^2 раза. –
@ aokk3 проверить мой ответ –