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


    }



}
4

1 に答える 1

1

まず第一に、英語でコーディングしてみてください。あなたが何をしていて、どこにエラーがあるのか​​を知るのはかなり難しいです。

私が気付いたもう 1 つのことは、public static int sprawdzaniekomorki別の条件を追加するためだけに、条件をグループ化して、毎回繰り返すことができるということです。次のように書くとより効率的です。

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

これは、コードをよりよく理解するのにも役立ちます。コードに英語のコメントを追加してください (Eclipse 用の jAutodoc-Plugin を参照してください)。

于 2012-12-16T18:41:39.880 に答える