2015-03-08 71 views
0

我是一個對編程有點新興的學生,我被要求在java中創建一個程序來讀取數獨網格中的數字,並確保列和行中沒有重複的數字,這是我到目前爲止有:在2x2數組中找到重複的數字。 (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列和每一行的行)。

+4

在這樣的時候,你會搶奪一個重要的學習機會,讓其他人指出問題給你。相反,請學習如何使用IDE的調試器,並逐行執行代碼(提示:直到碰到錯誤的代碼纔會花很長時間)。 – Kon 2015-03-08 17:50:47

+0

如果您不使用IDE,請添加打印語句以瞭解代碼的流程。 – CKing 2015-03-08 17:52:58

+0

或者您可以嘗試三個循環,或者只需使用HashSet並檢查數字是否重複。 – Prashant 2015-03-08 18:01:11

回答

0

在您閱讀本代碼之前,我只會建議您,您的問題會有更優雅的解決方案。我已經參考你的代碼編寫了這段代碼。

在這段代碼中,testColumn()testRow()是兩個方法whoose工作只是檢查一個數字(作爲參數傳遞給這些函數)是否存在於此行/列中。

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.我沒有編譯這個代碼。如果有任何編譯時錯誤,我會提前道歉。我歡迎任何建議或修改建議。

+0

我明白了,非常感謝你花時間寫這篇文章,我意識到可能有更優雅的方法去做,但是由於我仍然在學習,我不確定如何去做,所以我非常感謝你以這種方式幫助我。我會趁這一段時間來看看一些差異。 – NewStuff779 2015-03-08 18:34:44