2012-02-16 23 views
1

ちょっと私は、特定の行または列とブロックの整数を比較するために私のコードを取得するのに問題があるこれらのパラメータ内に重複がないことを確認しています。私は、3つの異なる方法で3つの制約を分けること、またはすべてを一度に行うことを試みることをお勧めします。2次元配列の行と列の整数の比較。数独

public static rowCheck(int[][] nsudokuBoard) { 

    for (int i =0; i < 9; i++) { 

     for (int j = 0; j < 9; j++) { 
      // (nsudokuBoard) 
     } 
    } 
} 

これは私のコードです。あなたの前に私はあなたが2次元配列の行のすべての値を比較する方法に固執して、このimをコンパイルすることができないために私を打ち砕く前に。

答えて

2

私はこのコードをコンパイルしようとしていないが、それはあなたの方法のアイデアを与える必要があり
void validate(final int[][] nsudokuBoard) { 
    final int width = nsudokuBoard[0].length; 
    final int depth = nsudokuBoard.length; 

    for (int i = 0; i < width; i++) { 
     int j = i; 
     int reference = nsudokuBoard[i][j]; 

     do { 
      if (j < width) { 
       int current = nsudokuBoard[i][j]; 

       if (current == reference) { 
       // invalid entry found do something 
       } 
      } 
      if (j < depth) { 
       // note reversed indexes 
       int current = nsudokuBoard[j][i]; 

       if (current == reference) { 
       // invalid entry found do something 
       } 
      } 
      ++j; 
     } while ((j >= width) || (j >= depth)); 
    } 
} 

あなたの仕事を達成する。私は、SudokuSquareの概念をカプセル化し、SudokuSquare[][]を渡すクラスを定義し、validateメソッドがすべての問題のあるエントリを含むList<SudokuSquare>を返すことができるように、int[][] sudokuBoardを渡すのではなく、

+0

私はあなたの提案を得ていません..別の方法を作ることに。あなたが私を失ったポイントは、SudokuSquareのコンセプトでした。 –

+0

しかし、助けてくれてありがとうございました:)ありがとうございました –

+0

私はループを抜け出すためにどこを増やすべきかを理解する助けが必要でした。私は何かをするために無効なエントリを見つけるあなたの提案を参照してください..しかし、私は何かが何か分かりません。それ以上の洞察? –

0

どのように1行で行うのかを示し、残りの部分を把握することができます。私はあなたの値が1から9までであると仮定しています。また、ゼロまたは "未入力のエントリ"がないことを前提としています。

boolean isRowValid(int[][] grid, int row) { 
    boolean[] seen = new boolean[9]; 
    int row; // chosen somewhere else 
    for (int col = 0; col < 9; col++) { 
    if (seen[grid[row][col] - 1]) { // if we've seen this value before in this row 
     return false; // there is a duplicate, and this is a bad sudoku 
    } 
    seen[grid[row][col] - 1] = true; // mark us as having seen this element 
    } 
    return true; // we're all good 
} 
return true; // this row is fine 
以下のコードに示すように2次元配列の全ての値を比較することができ
+0

シーケンスには、ブール値[]、セットまたはそれ以上のビットセットが必要です。 –

0

クラスを作成するフィールドrow、col、block、valueを持つセル。フィールドセル=セル[]、行列を埋めるクラスMatrixを作成します。 メインメソッドMatrix matrix = init(int [] [])でクラスチェッカーを作成し、init(・)が行列を満たすところでチェック(matrix)します。 boolean ok = check(matrix)check(Matrix)は、(!rowcheck())がfalseを返す場合はどこでチェックしますか? if(!colcheck())がfalseを返すなど。

getrows()、getrow(r)、for(Cell cell:matrix.values())などのメソッドを作成して、必要なものを除外します。

少し面倒ですが、私はそれをしており、それは岩のようにしっかりしています。

注意してください。行列をフィルタリングすると愚かに思えるかもしれませんが、コンピュータは高速で9x9なので問題はO(1)です。