我在学习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];
我对此仍然有点困惑。你能解释一下这种方法,还是告诉我另一种方法呢?
答案 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];
}
}