Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较二维数组的行和列的整数。数独_Java_Multidimensional Array_Sudoku - Fatal编程技术网

Java 比较二维数组的行和列的整数。数独

Java 比较二维数组的行和列的整数。数独,java,multidimensional-array,sudoku,Java,Multidimensional Array,Sudoku,嘿,我很难让我的代码比较给定行或列和块的整数,以确保这些参数中没有重复项。我不知道用三种不同的方法来区分这三种禁忌是一个好主意,还是尝试一次完成所有的工作 public static rowCheck(int[][] nsudokuBoard) { for (int i =0; i < 9; i++) { for (int j = 0; j < 9; j++) { // (nsudokuBoard) } }

嘿,我很难让我的代码比较给定行或列和块的整数,以确保这些参数中没有重复项。我不知道用三种不同的方法来区分这三种禁忌是一个好主意,还是尝试一次完成所有的工作

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

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

        for (int j = 0; j < 9; j++) { 
            // (nsudokuBoard)
        }
    }
}
公共静态行检查(int[]nsudokuBoard){
对于(int i=0;i<9;i++){
对于(int j=0;j<9;j++){
//(nsudokuBoard)
}
}
}

这是我的代码我开始。在你们责骂我不能编译这个之前,我一直在讨论如何比较2d数组中一行的所有值

我将向您展示如何在一行中执行此操作,然后您可以计算出其余部分。我假设您的值是
1
9
的,并且没有任何零或任何“未填充项”

boolean isRowValid(int[][]网格,int行){
boolean[]seen=新的boolean[9];
int行;//在其他地方选择
for(int col=0;col<9;col++){
if(看到[grid[row][col]-1]){//
return false;//有一个副本,这是一个糟糕的数独
}
seen[grid[row][col]-1]=true;//将我们标记为已看到此元素
}
return true;//我们都很好
}
返回true;//这一排很好

您可以比较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));
    }
}
void验证(最终int[]nsudokuBoard){
最终整型宽度=NSUDOKUBORD[0]。长度;
最终整型深度=nsudokuBoard.length;
对于(int i=0;i=宽度)|(j>=深度));
}
}

我还没有尝试编译这段代码,但它应该能让您了解如何完成任务。我建议您不要传入
int[]]sudokuBoard
,而应该定义一个类来封装
SudokuSquare
的概念,并传入
SudokuSquare[][]
,这样,您的
validate
方法可以返回一个包含所有违规条目的
列表。

用字段行、列、块、值创建一个类单元格;然后用字段cells=cell[]创建一个类矩阵,填充矩阵。 使用主方法Matrix=init(int[][])和check(Matrix)生成一个类检查器,其中init(·)填充矩阵。 布尔ok=检查(矩阵),如果(!rowcheck())返回false,则检查(矩阵)不执行;如果(!colcheck())返回false等

创建一些方法,如getrows()、getrow(r)和for(Cell-Cell:matrix.values())来筛选出所需的方法

有点乏味,但我已经做到了,它像岩石一样坚固


需要注意的是,对矩阵进行过滤可能看起来很愚蠢,但计算机速度很快,问题是O(1),因为它是9x9。

您需要在序列中放置一组数字:布尔[],集合或更好的位集合。我不太明白您的建议。。用不同的方法。你把我弄丢的地方是数独格的概念。我需要帮助弄清楚在哪里增加j以摆脱循环。当它发现做某事的无效条目时,我看到了你的建议。。但我不知道那是什么东西。还有什么见解吗?请参阅下面的链接了解我所说的封装:
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));
    }
}