Java 比较二维数组中幻方在不同方向上的和

Java 比较二维数组中幻方在不同方向上的和,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我是java新手,刚刚开始学习如何使用2d数组。我要做的是比较不同行、列和不同对角线的和,以确定数组在哪里是真正的幻方。然而,现在我所能做的就是打印出我的数组。我不断得到一个错误,它找不到我试图输入colSUm和rowSum参数的变量。因此,我不确定我的求和逻辑是否正确 public class MagicSquare { private int[][] grid; public MagicSquare(int[][] g) {

我是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;
    }      
公共类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