2017-02-22 74 views
-1

我有下面的代碼,通過檢查每個隨機數來解決數獨如果在數獨中不重複但是不起作用&我認爲它在無限循環中發生,因爲它沒有'如果我的方法完全錯誤,請告訴我正確的方法,並請編輯我的代碼。檢查數獨(java)中的每個隨機數

package essai; 

import java.util.Random; 

public class Essai_checker { 

    static final boolean valide=true; 
    static final boolean non_valide=false; 

    //check number if not deplicate in row or colomn or sub grid 
static boolean checkInt(int a[][],int test,int c_i,int c_j){ 

     if(test==0) return non_valide; 

     //check ligne 
     for(int i=0;i<9;i++){ 
      if(test==a[c_i][i]) return non_valide; 
     } 
     //check colomn 
     for(int i=0;i<9;i++){ 
      if(test==a[i][c_j]) return non_valide; 
     } 

     //check sub_grid 

     int ii=c_i/3; 
     int jj=c_j/3; 
     // this test are for telling wich sub-grid contain the number 
     if(ii<3) c_i=0; 
     else 
      if(ii>1 && ii<2) c_i=3;  
      else if(ii>2 && ii<=3) c_i=6; 

     if(jj<3) c_j=0; 
     else 
      if(jj>1 && jj<2) c_j=3;  
      else if(jj>2 && jj<=3) c_j=6; 

     for(int i=c_i;i<c_i+3;i++){ 
      for(int j=c_j;j<c_j+3;j++){ 
       if(test==a[c_i][c_j]) return non_valide; 
      } 
     } 
      return valide; 
     } 
    public static void main(String[] args) { 
     int [][] soduko2={ 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0} 
      }; 
     Random r=new Random(); 
     for(int i=0;i<9;i++){ 
      for(int j=0;j<9;j++){ 
       int entier=r.nextInt(9)+1; 
       boolean init =checkInt(soduko2,entier,i,j); 
       while(init ==non_valide){ 
        entier=r.nextInt(9); 
        init =checkInt(soduko2,entier,i,j); 
       } 
       if(init=true) 
        soduko2[i][j]=entier; 
      } 
      } 
     for(int i=0;i<9;i++){ 
      for(int j=0;j<9;j++){ 
       System.out.println(soduko2[i][j]+","); 
      } 
     } 
     System.out.println("Done!"); 

    } 

} 
+0

-1「請告訴我關於寫入方式,請爲我編輯代碼」 - 「正確的方式」,並按照你想要的方式編輯代碼並非SO工作的方式 – ControlAltDel

+0

問題出在你的主板上填充算法。填充的方式可能會使您在最後沒有給定方塊可用的有效值的地方結束。在這種情況下,你的程序將被卡住,產生隨機數字,其中沒有一個會工作。你需要更好的算法 – ControlAltDel

+0

我不這麼認爲,因爲它每次都測試所有的sudoko – Katty

回答

1

首先,條件(ii>1 && ii<2)將永遠是假的,說不上來,如果這是一個問題

二,條件(ii>2 && ii<=3)只會是真實的,如果ii==3

也許這將成爲團隊的一分子問題

+0

我做了評論的子網格檢查和一樣的問題 – Katty