2015-01-16 1 views
1

Я пытаюсь написать статический метод, возвращающий целое число, принимает в качестве параметра 2-мерный массив целых чисел и возвращает индекс строки в массиве 2-мерного массива (зубчатые массивы), который имеет наибольшую сумму всех ее элементов. Что-то пошло не так по линии, и я все еще пытаюсь понять. Помоги пожалуйста?
Вот код:Статические методы и массивы Jagged

public static int findMaxRow(int[][] maxRows){ 
     newI= 0; 
     newJ= 0; 
     for(int i=0; i< maxRows.length; i++) { 
      newI += i; 
      for(int j=0; j< maxRows.length; j++) { 
       newJ += j; 
      `` if(newI > newJ){ 
       return newI; 
      else { 
      } 
      } 
     } 
    } 
+1

У вас есть два "'" перед вашим' if' заявления, и ваше отсутствие закрывающей скобки "}" перед вашей 'else' заявления. Кроме того, в вашем коде 'newI' никогда не будет больше, чем' newJ', так как 'newI' будет добавлять значение' i' 'maxRows.length' раз, а' newJ' добавит значение 'j'' maxRows.length'^2 раза. –

+0

@ aokk3 проверить мой ответ –

ответ

0

Внесение изменений в программу, следующий пример возвращает индекс строки, имеющей наибольшую сумму элементов в нем.

Предположим, наш массив передается в:

int [][] maxRows = {{1,2,3}, {1,2,3,4,5}, {9,9,9,9}, {1,2}}; 

передавая этот массив в методе

 public static int findMaxRow(int[][] maxRows){ 
     int sum = Integer.MIN_VALUE; 

     int biggestIndex= 0; 
     for(int i = 0; i<maxRows.length; i++){ 
      int temp = 0; 
      for(int ir : maxRows[i]){ 
      temp+=ir; 
      } 
      if(temp>sum){ 
      sum = temp; 
      biggestIndex = i; 
     } 
     } 

      return biggestIndex; 

    } 

выше программа возвращает индекс внутреннего массива, который имеет самую большую сумму элементов, в приведенном выше случае он вернет 2.

1

Вы никогда не определяете тип для 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 

 Смежные вопросы

  • Нет связанных вопросов^_^