2012-12-16 884 views
1

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

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]);} 


    } 



} 
+1

什么是不工作?抛出的任何异常? –

+1

没有人会通过这么多的代码,找出一个特定的帮助,你需要在这里粘贴相关代码 – geekman

+1

另外,用你的母语命名你的方法和变量确实没有帮助...在你的代码中注释相同。 .. –

回答

1

好的,首先:尝试使用英文编码。很难得到你所做的和错误的地方。

我注意到的另外一件事是,您可以将您的条件分组,以便每次重复使用它们,以增加另一个条件。它会更有效地写出:

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

这也有助于更好地理解代码。 所以,请在代码中添加英语评论(也许看看eclipse的jAutodoc-Plugin),我也许能够帮助:)

+1

好吧对不起,我是新来的,但我认为问题是功能检查数独专栏。 –

+0

没问题!如果你告诉我它是什么功能,我愿意看一看,即使我不明白变量应该是什么,我认为如果有变量的话我会发现一个错误。 – Theolodis

+1

这里是函数的名称'公共静态int sprawdzaniepion(INT indeks,INT选项卡[]){//sprawdieie w poionie' –