2016-11-17 15 views
-1

Javaではなく、2次元配列の使い方を学んだばかりです。私がしようとしているのは、行列と真の魔法の正方形がどこにあるのかを判断するために、行と列の異なる総和と異なる対角線を比較することです。しかし、今、私が行うことができるのは私の配列をプリントアウトすることだけです。私はcolSUmとrowSumのパラメータに入れようとしている変数を見つけることができないというエラーが発生し続ける。このため、私の論理が実際に正しいのかどうかはわかりません。2次元配列のマジックスクエアの異なる方向の合計を比較する

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つのメソッドです。

+0

のrowSumとcolSumメソッドでは、内部ループのみが必要です –

+0

エラーが発生しました。「メソッドrowSumは、指定された型には適用できません;必須int、引数が見つからない、理由:私のisMagicSquare()メソッドで "length"を返します。私はint行とint colをパラメータに追加しようとしましたが、それはうまくいきませんでした。 –

+0

あなた自身で文法エラーを修正しました –

答えて

0

私は本当にあなたがisMagicSquare function.Thisでやろうとしているのか理解していない私は

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()); 
    } 
} 

CHANGESと考えることができる最も単純ロジックです:
1.Both rowSumとcolSum関数は、両方のディメンションを反復処理するのではなく、特定の行または列に対してのみ機能するようになりました。
2. isMagicSquareをチェックするロジックについては、最初に対角線が等しいかどうかをチェックし、すべての行と列の合計を対角に比較して最初に失敗した場合はfalse値で終了し、真の価値をもって

+0

あなたが行ったことを説明し、同様のメソッドを削除してください、これはもっと読みやすくなります) – AxelH

+0

@AxelHいくつかの説明を追加しました...同じような方法は実際にはありませんが、少し違いがあり、私はOPの元の構造を維持しようとしています...他のフィードバックは大歓迎です...私は通常このような質問に答えません...知らないもし私が –

+0

でなければならない場合は、多くの変更があったら、これはおそらくコードでは答えられないはずです;)私はいつもOPがなぜこの作品が検索されずに貼り付けをコピーするのではないかと心配しました。 – AxelH

関連する問題