我是java新手,刚刚开始学习如何使用2d数组。我要做的是比较不同的行,列和不同的对角线的和来确定哪个数组是真正的魔方。然而,现在,我所能做的就是打印我的数组。我不断得到的错误,它找不到变量,我试图把colSUm和rowSum的参数。正因为如此,我不确定我的求和逻辑是否正确。
public class MagicSquare
{
private int[][] grid;
public MagicSquare(int[][] g)
{
grid=g;
}
/**
* find the sum of a given row
*/
public int rowSum(int row)
{
int sum;
for (row=0; row < grid.length; row++)
{
sum = 0;
for ( int col=0; col < grid[row].length; col++)
{
sum = sum + grid[row][col];
}
}
return sum;
}
/**
* find the sum of a given column
*/
public int colSum(int col)
{
int sum;
for (int i = 0; i < grid.length; i++)
{
sum = 0;
for (int j = 0; j < grid[i].length; j++)
{
sum += grid[j][i];
}
}
return sum;
}
/**
* returns the sum in the "up" diagonal (from the lower left to the upper right)
*/
public int upDiagSum()
{
int totalup = 0;
for (int row = 0; row < grid.length; row++)
{
totalup += grid[row][row];
}
return totalup;
}
/**
* determines if the sum all rows, columns, and main diagonals are equal
*/
public boolean isMagicSquare()
{
boolean isMagicSquare = false;
while(!isMagicSquare)
{
if (downDiagSum()!=upDiagSum() && rowSum(row) != colSum(i))
return false;
else
return true;
}
return isMagicSquare;
}
我没有在这里包含downDiag方法因为我确实想要重复。这是我的代码中最重要的4个方法
我真的不明白你想在isMagicSquare函数中做什么。这是我能想到的最直接的逻辑
public class MagicSquare
{
private int[][] grid;
public MagicSquare(int[][] g)
{
grid = g;
}
/**
* find the sum of a given row
*/
public int rowSum(int row)
{
int sum;
sum = 0;
for (int col = 0; col < grid.length; col++)
{
sum = sum + grid[row][col];
}
return sum;
}
/**
* find the sum of a given column
*/
public int colSum(int col)
{
int sum;
sum = 0;
for (int row = 0; row < grid.length; row++)
{
sum += grid[row][col];
}
return sum;
}
/**
* returns the sum in the "up" diagonal (from the lower left to the upper
* right)
*/
public int upDiagSum()
{
int totalup = 0;
for (int row = 0; row < grid.length; row++)
{
totalup += grid[grid.length - row - 1][row];
}
return totalup;
}
public int downDiagSum()
{
int totalup = 0;
for (int row = 0; row < grid.length; row++)
{
totalup += grid[row][row];
}
return totalup;
}
/**
* determines if the sum all rows, columns, and main diagonals are equal
*/
public boolean isMagicSquare()
{
boolean isMagicSquare = true;
int upDiagSum = upDiagSum();
int downDiagSum = downDiagSum();
if (upDiagSum == downDiagSum)
{
for (int i = 0; i < grid.length; i++)
{
if (colSum(i) == upDiagSum)
{
continue;
}
else
{
isMagicSquare = false;
break;
}
}
if (isMagicSquare)
{
for (int i = 0; i < grid.length; i++)
{
if (rowSum(i) == upDiagSum)
{
continue;
}
else
{
isMagicSquare = false;
break;
}
}
}
}
else
{
isMagicSquare = false;
}
return isMagicSquare;
}
public static void main(String args[])
{
int[][] g = { { 8, 1, 6 }, { 3, 5, 7 }, { 4, 9, 2 } };
MagicSquare ms = new MagicSquare(g);
System.out.println(ms.isMagicSquare());
}
}
变化:
1。rowSum和colSum函数现在都只作用于特定的行或列,而不是遍历这两个维度。
2。至于检查isMagicSquare的逻辑,首先检查对角线是否相等,如果它们相等,将每一行和每一列的和与对角线中的任何一个进行比较,如果第一次失败,则以假值退出,如果不失败则以真值退出。