我是一名对编程有点新的学生,我被要求在java中创建一个程序来读取数据网格中的数字,并确保列和行中没有重复的数字,这就是我到目前为止:
int e=0;
int h=0;
boolean k = true;
int sd = 0;
for (int i=0; i< 9; i++){
for (int j=i+1; j< 9; j++){
if (sudoku[j][0]==sudoku[i][0]){
k=false;
}
}
}
for (int i=0; i< 9; i++){
for (int j=i+1; j< 9; j++){
if (sudoku[0][j]==sudoku[0][i]){
k = false;
}
}
}
if ( k){
System.out.println("Valid sudoku");
}
else if ( !k){
System.out.println("Not a valid sudoku");
}
}
我的代码不能正常工作,因为它始终显示有效的数独,即使它不应该,我想知道如何解决这个问题。 在此之前,我感谢您提供给我的任何帮助。 (我有想法扫描,好像它是一个1x1数独但添加0所以它从第0列和每行的行开始。)
答案 0 :(得分:0)
在您阅读此代码之前,我建议您为您的问题提供更优雅的解决方案。我已经参考了您的代码编写了这段代码。
在这段代码中,testColumn()
和testRow()
是两种方法,只是为了检查一个数字(作为这些函数的参数传递)是否存在于此行/列中。
int testColumn(int grid[9][9], int column, int number) {
for(int row=0; row<9; row++) {
if(grid[row][column]==number) {
return 1;
}
}
return 0;
}
int testRow(int grid[9][9], int row, int number) {
for(int column=0; column<9; column++) {
if(grid[row][column]==number) {
return 1;
}
}
return 0;
}
void checkRowColumn(int grid[9][9]) {
boolean k=true;
for(int row=0; row<9; row++) {
for(int column=0; column<9; column++) {
int numberToCheck = grid[row][column];
if(testColumn(grid, column, numberToCheck)) {
k = false;
}
if(testRow(grid, row, numberToCheck)) {
k = false;
}
}
}
if(k) {
System.out.println("Valid Sudoku");
}
else {
System.out.println("Invalid Sudoku");
}
}
P.S。我还没有编译这段代码。如果有任何编译时错误,我会提前道歉。我欢迎任何建议或修改建议。