gpt4 book ai didi

java - 数独生成器

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:59 24 4
gpt4 key购买 nike

我是一名新手程序员,我正在尝试编写数独生成器。
我知道我的代码的外观不太好。
有人可以告诉我如何改进它以及如何使我的生成器工作吗?

import java.util.Random;
public class Main {
static final int n=9; //taka pomocnicza stala

public static int dodawaj(int x){ //dodawanie liczby
if (x==9)
x=1;
else x++;
return x;

}
public static int losowanieliczby(int x){ //losujemy liczbe
Random r = new Random();
x=r.nextInt(n)+1;
return x;
}
public static int sprawdzaniepoziom(int indeks, int tab[]){ //sprawdzenie w poziomie
int czyprawda=1;
int licznik=(indeks%n); //ile pol ma sie cofac i sprawdzac
if (licznik==0) return czyprawda; //wykonywanie sprawdzenia
else
for (int i=indeks-licznik; i<indeks; i++){
if (tab[indeks]==tab[i]) {return czyprawda=0;}
}
return czyprawda;
}
public static int sprawdzaniekomorki(int indeks, int tab[]){ //sprawdzenie komorki
int czyprawda=1;
if ((indeks%9)%3==0 && (indeks/9)%3==0) return czyprawda;
if ((indeks%9)%3==1 && (indeks/9)%3==0){ if (tab[indeks]==tab[indeks-1]) return czyprawda=0;}
if ((indeks%9)%3==2 && (indeks/9)%3==0){ if (tab[indeks]==tab[indeks-1] || tab[indeks]==tab[indeks-2]) return czyprawda=0;}
if ((indeks%9)%3==0 && (indeks/9)%3==1){ if (tab[indeks]==tab[indeks-9] || tab[indeks]==tab[indeks-8] || tab[indeks]==tab[indeks-7]) return czyprawda=0;}
if ((indeks%9)%3==1 && (indeks/9)%3==1){ if (tab[indeks]==tab[indeks-1] || tab[indeks]==tab[indeks-10] || tab[indeks]==tab[indeks-9] || tab[indeks]==tab[indeks-8]) return czyprawda=0;}
if ((indeks%9)%3==2 && (indeks/9)%3==1){ if (tab[indeks]==tab[indeks-1] || tab[indeks]==tab[indeks-2] || tab[indeks]==tab[indeks-11] || tab[indeks]==tab[indeks-10] || tab[indeks]==tab[indeks-9]) return czyprawda=0;}
if ((indeks%9)%3==0 && (indeks/9)%3==2){ if (tab[indeks]==tab[indeks-9] || tab[indeks]==tab[indeks-8] || tab[indeks]==tab[indeks-7] || tab[indeks]==tab[indeks-18] || tab[indeks]==tab[indeks-17] || tab[indeks]==tab[indeks-16]) return czyprawda=0;}
if ((indeks%9)%3==1 && (indeks/9)%3==2){ if (tab[indeks]==tab[indeks-1] ||tab[indeks]==tab[indeks-10] || tab[indeks]==tab[indeks-9] || tab[indeks]==tab[indeks-8] || tab[indeks]==tab[indeks-19] || tab[indeks]==tab[indeks-18] || tab[indeks]==tab[indeks-17]) return czyprawda=0;}
if ((indeks%9)%3==2 && (indeks/9)%3==2){ if (tab[indeks]==tab[indeks-1] ||tab[indeks]==tab[indeks-2] ||tab[indeks]==tab[indeks-11] || tab[indeks]==tab[indeks-10] || tab[indeks]==tab[indeks-9] || tab[indeks]==tab[indeks-20] || tab[indeks]==tab[indeks-19] || tab[indeks]==tab[indeks-18]) return czyprawda=0;}
return czyprawda;
}
public static int sprawdzaniepion(int indeks, int tab[]){ //sprawdzenie w poionie
int czyprawda=1;
int licznik=indeks/n;
int y=indeks;
if (licznik==0) return czyprawda;
else
for (int i=0; i<licznik; i++){
y=indeks-9;
if (tab[indeks]==tab[y]) {return czyprawda=0;}
}
return czyprawda;
}

public static class Sprawdzarka{
static int y=0;
static int czyok=0;
public static int[]alggeneruj(int tab[], int indeks){
czyok=0;
while(y!=9){
if (sprawdzaniepoziom(indeks, tab)==0 || sprawdzaniekomorki(indeks, tab)==0 || sprawdzaniepion(indeks, tab)==0){
tab[indeks]=dodawaj(tab[indeks]);
y++;
alggeneruj(tab, indeks);
}else{y=0; czyok=1; return tab;}
}
y=0; czyok=0; return tab;

}
}

public static void main(String args[]){
int tab[] = new int [n*n];
int indeks=0;
while (indeks!=81){
tab[indeks]=losowanieliczby(tab[indeks]);
tab=Sprawdzarka.alggeneruj(tab, indeks);
if (Sprawdzarka.czyok==0){
indeks--;
while (Sprawdzarka.czyok!=1) {tab=Sprawdzarka.alggeneruj(tab, indeks);};
}
indeks++;
}
for (int j=0; j<81; j++){if (j%9==0)System.out.println();
System.out.print(tab[j]);}


}



}

最佳答案

好吧,首先:尝试用英语编码。很难了解您所做的事情以及错误可能出在哪里。

我注意到的另一件事是,您的 public static int sprawdzaniekomorki 您可以对条件进行分组,因为您每次都重复它们,只是为了添加另一个条件。写起来会更有效率:

int returnValue = 1;
if(){
if(){
returnValue = x;
}else{
returnValue = y;
}
}
return returnValue;

这也有助于更好地理解代码。所以请在代码中添加英文注释(也许可以看看 jAutodoc-Plugin for eclipse),我也许可以提供帮助:)

关于java - 数独生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13904280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com