2012-02-16 5 views
1

Я изучаю Java. И я хотел сделать код для проверки 2D-массива, который возвращается, если он является магическим квадратом или нет.Как получить сумму каждого столбца матрицы nxn в Java?

Для этого мне пришлось написать пару разных методов, и один из них был для проверки - все суммы элементов в каждом столбце равны. Я мог бы сделать для строк, но я немного запутался, когда я попытался сделать это для столбцов. И мой друг сказал, что это почти то же самое с методом, который проверяет суммы всех строк равными. Мой метод для строк ниже.

public static boolean rowSumsOK(int arr[][], int total) { 
    boolean a = false; 
    total = sumOneRow(arr); 
    int x=0; // this will be counted sum for each rows 

    for (int i=0; i<arr.length; i++){ 
     for (int j=0; j<=arr.length; j++){ 
      x = x + arr[i][j]; 
     } 
     if(x != total){ 
      a = false; 
      break; 
     } 

     else 
      a = true; 
    } 

    return a; 
} 

и он предложил изменить в этом способе делать это для столбцов:

 x = x + arr[j][i]; 

Я все еще немного запутался об этом. Можете ли вы объяснить мне этот метод или показать мне другой способ сделать это ребята?

+2

предложению дается вам следует суммировать столбцы. Если вы смущены, я предлагаю вам больше узнать о том, какие массивы и/или как работают петли. – Danny

+0

Я не знаю, как это произошло, но я просто понял, что сказал после публикации здесь. может быть, я не был достаточно сосредоточен, чтобы понять, что он имел в виду. спасибо в любом случае –

ответ

2
public static boolean columnSumsOK (int arr[][], int total) 
    { 
     for (int j = 0; j < arr [ 0 ].length; j++) 
     { 
      int sum = 0; 
      for (int i = 0; i < arr.length; i++) 
       sum = sum + arr [ i ] [ j ]; 
      if (sum != total) 
       return false; 
     } 
     return true; 
    } 
+0

спасибо за ответ, я понимаю. он выглядит чистым и простым. –

+0

Timur, проверьте мой код еще раз, произошла некоторая ошибка индекса, он работает таким образом, что пытается вычислить сумму каждого элемента столбца один за другим, а затем сравнивает сумму этого столбца с «полным» параметром, если они не равны метод возвращает false немедленно, иначе он продолжает оценивать. – Juvanis

+0

Hi deporter, извините за поздний отклик. Я снова прочитал ваш код, и я понял. kudos (y) –

0

Я бы сохранил еще один массив (columnTotal), который имеет totalSum элементов в столбце i. Затем пропустите столбцы, по одному столбцу за раз и суммируйте строки в этом столбце. В принципе, это код для суммирования строк, но с внутренней и внешней петлями. Попробуйте что-то вроде этого:

int columnTotal[] = new int[array.length]; 

for(int column= 0; column< array.length; column++) 
{ 
    columnTotal[column] = 0; 
    for(int row= 0; row < array.length; row++) 
    { 
     columnTotal[column] += array[row][column]; 
    } 
} 
+0

Я думаю, это должно быть columnTotal [column] + = array [row] [column]; – vjain27

+0

Да, опечатка. Виноват. Отредактировано для исправления кода. – Oleksi

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