检查数独(java)中的每个随机数

检查数独(java)中的每个随机数,java,artificial-intelligence,solver,sudoku,game-theory,Java,Artificial Intelligence,Solver,Sudoku,Game Theory,我有下面的代码,通过检查每个随机数来解决数独问题,如果在数独中不重复但不起作用&我认为它进入无限循环,因为它没有显示任何结果,如果我的方法完全错误,请告诉我正确的方法,并为我编辑代码 package essai; import java.util.Random; public class Essai_checker { static final boolean valide=true; static final boolean non_valide=false;

我有下面的代码,通过检查每个随机数来解决数独问题,如果在数独中不重复但不起作用&我认为它进入无限循环,因为它没有显示任何结果,如果我的方法完全错误,请告诉我正确的方法,并为我编辑代码

 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!");

    }

}
package-essai;
导入java.util.Random;
公共类Essai_检查器{
静态最终布尔值valide=true;
静态最终布尔值非有效=false;
//如果行、列或子网格中没有显示,请检查编号
静态布尔checkInt(inta[]],inttest,intc_i,intc_j){
如果(测试==0)返回非有效值;
//检查线路

对于(int i=0;i首先,条件
(ii>1&&ii2&&ii-1)“请告诉我写入方式并为我编辑代码”——“正确的方式”,以您想要的方式编辑代码不是有效的方法问题在于您的电路板填充算法。填充方式可能会使您最终无法获得给定正方形的有效值。在这种情况下,您的程序将陷入生成随机数的困境,而这些随机数都无法工作。您需要更好的算法我不这么认为,因为每次我知道有一个AG方法时,它都会测试所有的sudoko,但我不想使用iti来做子网格签入注释和同样的问题