如何在Java中获取nxn矩阵的每一列的总和?

时间:2012-02-16 18:31:22

标签: java matrix

我在学习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 个答案:

答案 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;
    }

答案 1 :(得分:0)

我会保留另一个数组(columnTotal),其中包含i列中元素的totalSum。然后循环遍历列,一次一列,并对该列中的行求和。基本上,它是行求和的代码,但内部和外部循环相反。尝试这样的事情:

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];
    }
}