我有以下代码,它通过检查数独中的每个随机数是否没有重复来解决数独问题,但它不起作用,我认为它进入了无限循环,因为它没有任何结果显示,如果我的方法完全错误,请告诉我正确的做法并帮我编辑代码。
package essai;import java.util.Random;public class Essai_checker { static final boolean valide=true; static final boolean non_valide=false; //检查数字在行、列或子网格中是否没有重复 static boolean checkInt(int a[][],int test,int c_i,int c_j){ if(test==0) return non_valide; //检查行 for(int i=0;i<9;i++){ if(test==a[c_i][i]) return non_valide; } //检查列 for(int i=0;i<9;i++){ if(test==a[i][c_j]) return non_valide; } //检查子网格 int ii=c_i/3; int jj=c_j/3; // 这些测试用于确定哪个子网格包含该数字 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("完成!"); }}
回答:
首先,条件 (ii>1 && ii<2)
总是为假,不知道这是否会成为问题
其次,条件 (ii>2 && ii<=3)
只有在 ii==3
时才为真
这可能是问题的一部分