Как получить сумму каждого столбца матрицы nxn в Java? - PullRequest
1 голос
/ 16 февраля 2012

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

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

    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 ]

2 голосов
/ 16 февраля 2012
    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 голосов
/ 16 февраля 2012

Я бы сохранил другой массив (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];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...