我是一名新手程序员,我正在尝试编写数独生成器 我知道我的代码的外观并不太好 有人能告诉我如何改进它以及如何使我的发电机工作吗?
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]);}
}
}
答案 0 :(得分:1)
好的,首先:尝试用英语编码。很难得到你做的和错误的位置。
我注意到的另一件事是,你的public static int sprawdzaniekomorki
你可以将你的条件分组,因为你每次都要重新调整它们,只是为了增加另一个条件。写作会更有效:
int returnValue = 1;
if(){
if(){
returnValue = x;
}else{
returnValue = y;
}
}
return returnValue;
这也有助于更好地理解代码。 所以,请在代码中添加英文评论(也许看一下eclipse的jAutodoc-Plugin),我也许可以帮忙:)。