1

ちょっと私は私のコードが与えられた行または列とブロックの整数を比較してそれらのパラメータ内に重複がないことを確認するのに問題があります。3つの制約を3つの異なる方法で分離するのが良いのか、それとも一度にすべてを実行しようとするのが良いのかはわかりません。

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

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

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

これが私のコードです。2D配列の行のすべての値を比較する方法に固執して、このimをコンパイルすることさえできなかったために、皆さんが私を打ちのめす前に。

4

3 に答える 3

2

以下のコードに示すように、2D配列のすべての値を比較できます。

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

私はこのコードをコンパイルしようとはしていませんが、それはあなたにあなたのタスクを達成する方法のアイデアを与えるはずです。渡すのではなく、 aの概念をカプセル化して渡すint[][] sudokuBoardクラスを定義する必要があることをお勧めします。そうすれば、メソッドはすべての問題のあるエントリを含むを返すことができます。SudokuSquareSudokuSquare[][]validateList<SudokuSquare>

于 2012-02-16T12:59:49.670 に答える
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
于 2012-02-16T11:33:28.280 に答える
0

フィールドrow、col、block、valueを持つクラスCellを作成します。次に、フィールドcells = cell []、fillmatrixでクラスMatrixを作成します。mainメソッドMatrixmatrix= init(int [] [])およびcheck(matrix)を使用してクラスチェッカーを作成します。ここで、init(・)は行列を埋めます。boolean ok = check(matrix)where check(Matrix)does if(!rowcheck())return false; if(!colcheck())はfalseなどを返します。

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

少し退屈ですが、私はそれをやりました、そしてそれは岩のようにしっかりしています。

注意として、行列のフィルタリングはばかげているように見えるかもしれませんが、コンピューターは高速であり、問​​題は9x9であるためO(1)です。

于 2015-05-31T15:02:44.370 に答える