在2x2阵列中查找重复的数字。 (JAVA)

时间:2015-03-08 17:44:21

标签: 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;
    }
}
  }
  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列和每行的行开始。)

1 个答案:

答案 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。我还没有编译这段代码。如果有任何编译时错误,我会提前道歉。我欢迎任何建议或修改建议。