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