Java 在2x2数组中查找重复的数字。(爪哇)
我是一名编程新手,有人要求我用java创建一个程序,读取数独网格中的数字,并确保列和行中没有重复的数字,这就是我目前所拥有的:Java 在2x2数组中查找重复的数字。(爪哇),java,Java,我是一名编程新手,有人要求我用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; } }
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行开始。在阅读此代码之前,我只建议您有更优雅的解决方案来解决您的问题。我写这段代码是为了参考你的代码 在这段代码中,testColumn和testRow是两个方法,它们的工作只是检查作为这些函数的参数传递的numberpassed是否存在于此行/列中
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");
}
}
另外,我还没有编译这段代码。如果有任何编译时错误,我提前道歉。我欢迎任何建议或编辑。在这种时候,你将失去一个重要的学习机会,让别人向你指出问题所在。相反,请学习如何使用IDE的调试器,并逐行检查代码提示:不需要很长时间就可以找到错误的部分。如果不使用IDE,添加print语句以了解代码流。您可以尝试使用三个循环,也可以使用HashSet检查数字是否重复。下面是一个提示。想想0在if sudoku[j][0]==sudoku[i][0]中的含义谢谢你的回答,我已经知道了,我发现它永远不会实现,假设0是数组的第一个字符,如果我将它设置为1,它确实会工作,但是,我不确定为什么会发生,为什么会发生?我明白了,非常感谢你花时间编写它,我知道可能有更优雅的方法可以做到这一点,但由于我仍在学习,我不知道如何做到这一点,我真的很感谢你在这方面帮助我。我将花一段时间研究一下,看看其中的一些差异。