Java 数独发生器回路

Java 数独发生器回路,java,generator,sudoku,Java,Generator,Sudoku,我正在尝试制作一个数独生成器,这样我就可以制作成一个数独游戏,我遇到了一个问题。。。 我已经成功地提出了一种方法,可以检查某个单元格,以及其中的数字是否在它所属的同一行、同一列或3x3正方形中重复,但我在随机生成数字并填充这些数字时遇到了问题。 基本上首先,我用1-9的随机数填充第一行,这些随机数在这行中只出现一次。 我的问题是,有没有可能在一个又一个单元格中填入适合到目前为止生成的数字的随机数,或者我应该逐行填入?或者一个接一个?因为我的循环似乎变成了一个无限循环。代码如下: packag

我正在尝试制作一个数独生成器,这样我就可以制作成一个数独游戏,我遇到了一个问题。。。 我已经成功地提出了一种方法,可以检查某个单元格,以及其中的数字是否在它所属的同一行、同一列或3x3正方形中重复,但我在随机生成数字并填充这些数字时遇到了问题。 基本上首先,我用1-9的随机数填充第一行,这些随机数在这行中只出现一次。 我的问题是,有没有可能在一个又一个单元格中填入适合到目前为止生成的数字的随机数,或者我应该逐行填入?或者一个接一个?因为我的循环似乎变成了一个无限循环。代码如下:

  package test;

    import java.util.Random;

    public class Test {
        public static void main(String[] args) {
            int[][]test=new int[9][9];
            int[]prva=new int[]{1,2,3,4,5,6,7,8,9};
            zapolniPrvo(test,prva);//fills the first line of the table
            print(test);
            System.out.println();
            int y=1;
            int x=0;
            int rn=0;
            int a=1;
            for(int i=1;i<9;i++){
                for(int j=0;j<9;j++){
                    while(!razlicnostT(j,i,test)){
                        test[i][j]=(int)(Math.random()*9+1);
                    }
                }
            }
            print(test);
        }
        public static boolean razlicnostT(int y,int x,int[][]test){ //checks for same number in the line, row and square
            int vrstica=0;
            int kolona=0;
            int yy=(y/3)*3;
            int xx=(x/3)*3;
            int yyy=(y%3);
            int xxx=(x%3);
            int kvadrat=0;
            boolean razlicnost=false;
            for(int i=yy;i<=yyy;i++){
                for(int j=xx;j<=xxx;j++){
                    if(test[i][j]==test[y][x]){
                        kvadrat++;
                    }
                }
            }
            for(int i=0;i<x;i++){
                if(test[y][i]!=test[y][x]){
                    vrstica++;
                }
            }
            for(int i=0;i<y;i++){
                if(test[i][x]!=test[y][x]){
                    kolona++;
                }
            }
            if((vrstica==x) && (kolona==y)&&(test[y][x]!=0)&&(kvadrat!=1)){
                razlicnost=true;
            } else {
                razlicnost=false;
            }
            return razlicnost;
        }
        public static void zapolniPrvo(int[][]test,int[]prva){
            randomize(prva);
            for(int i=0;i<9;i++){
                test[0][i]=prva[i];
            }
        }
        public static void print(int[][]test){
            for(int i=0;i<test.length;i++){
                for(int j=0;j<test.length;j++){
                    System.out.print(test[i][j]+" ");
                }
                System.out.println();
            }
        }
        public static void randomize (int[]temp){
            Random rnd = new Random();
            for (int i = temp.length - 1; i > 0; i--){
                int index = rnd.nextInt(i + 1);
                int a = temp[index];
                temp[index] = temp[i];
                temp[i] = a;
            }
        }
    }
封装测试;
导入java.util.Random;
公开课考试{
公共静态void main(字符串[]args){
int[][]测试=新int[9][9];
int[]prva=新的int[]{1,2,3,4,5,6,7,8,9};
zapolniPrvo(test,prva);//填充表的第一行
打印(测试);
System.out.println();
int y=1;
int x=0;
int rn=0;
INTA=1;

对于(inti=1;i,从我所看到的导致问题的语句是

if((vrstica==x)和&(kolona==y)和&(test[y][x]!=0)和&(kvadrat!=1)){
razlicnost=true;

由于
razlicnost
被初始设置为false,因此该语句显然永远不会为true,这会导致
在(!razlicnost(j,i,test)
无限运行时

这肯定是应用程序逻辑中的错误。不幸的是,由于您的代码错误,我无法帮助您

  • 它的格式很差
  • 使用不同的语言
  • 使用完整(或无)命名约定(像
    y
    yy
    xxx
    这样的名称是将来任何人查看代码的噩梦)

  • 我的建议是重写此代码以使其更具可读性,因为修复此代码可能需要更长的时间

    请在此处发布代码。如果您的问题得到回答,粘贴箱消失,其他人将很难从您的问题中受益。到底哪个循环运行无限?您到底做了什么?按句子
    填写c是否可能一个单元格接一个单元格,随机数与迄今为止生成的数字相匹配,还是我应该逐行填充?
    这一行:
    for(int I=1;I)