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



我是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的逻辑,首先检查对角线是否相等,如果它们相等,将每一行和每一列的和与对角线中的任何一个进行比较,如果第一次失败,则以假值退出,如果不失败则以真值退出。

最新更新