Java 比较二维数组中幻方在不同方向上的和
我是java新手,刚刚开始学习如何使用2d数组。我要做的是比较不同行、列和不同对角线的和,以确定数组在哪里是真正的幻方。然而,现在我所能做的就是打印出我的数组。我不断得到一个错误,它找不到我试图输入colSUm和rowSum参数的变量。因此,我不确定我的求和逻辑是否正确Java 比较二维数组中幻方在不同方向上的和,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我是java新手,刚刚开始学习如何使用2d数组。我要做的是比较不同行、列和不同对角线的和,以确定数组在哪里是真正的幻方。然而,现在我所能做的就是打印出我的数组。我不断得到一个错误,它找不到我试图输入colSUm和rowSum参数的变量。因此,我不确定我的求和逻辑是否正确 public class MagicSquare { private int[][] grid; public MagicSquare(int[][] g) {
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;
}
公共类MagicSquare
{
私有int[][]网格;
公共MagicSquare(int[][]g)
{
网格=g;
}
/**
*求给定行的和
*/
公共整数行和(整数行)
{
整数和;
对于(行=0;行
我没有在这里包括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());
}
}
公共类MagicSquare
{
私有int[][]网格;
公共MagicSquare(int[][]g)
{
网格=g;
}
/**
*求给定行的和
*/
公共整数行和(整数行)
{
整数和;
总和=0;
for(int col=0;col
变化:
1.rowSum和colSum函数现在只在特定的行或列上工作,而不是遍历这两个维度。
2.至于检查isMagicSquare的逻辑,首先检查对角线是否相等,如果它们是相等的,则比较每一行和每一列的总和是否为对角线,如果第一次失败,则使用false值退出,如果没有失败,则使用true值退出。在rowSum和colSum方法中,您只需要内部循环,现在我得到了错误my isMagicSquare()中的“MagicSquare类中的方法rowSum无法应用于给定类型;必需int;未找到任何参数;原因:实际参数列表和形式参数列表长度不同”方法。我尝试将int行和int col添加到参数中,但不起作用。自行修复语法错误这是我在过去一个小时内一直在尝试做的。我不确定我到底做错了什么。你至少能告诉我,我试图在参数中添加的内容是否接近正确?star