2012-12-16 50 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' –