2017-02-22 5 views
-1

Ich habe den Code unter dem lösen das Sudoku per check jede beliebige Nummer, wenn nicht im Sudoku Duplikat ist aber nicht funktioniert & Ich denke, es geht in Endlosschleife, weil es doesn ' t zeige irgendein Ergebnis, wenn meine Methode komplett falsch ist, erzähle mir bitte den richtigen Weg und bearbeite den Code für mich bitte.überprüfen Sie jede beliebige Zahl in Sudoku (Java)

package essai; 

import java.util.Random; 

public class Essai_checker { 

    static final boolean valide=true; 
    static final boolean non_valide=false; 

    //check number if not deplicate in row or colomn or sub grid 
static boolean checkInt(int a[][],int test,int c_i,int c_j){ 

     if(test==0) return non_valide; 

     //check ligne 
     for(int i=0;i<9;i++){ 
      if(test==a[c_i][i]) return non_valide; 
     } 
     //check colomn 
     for(int i=0;i<9;i++){ 
      if(test==a[i][c_j]) return non_valide; 
     } 

     //check sub_grid 

     int ii=c_i/3; 
     int jj=c_j/3; 
     // this test are for telling wich sub-grid contain the number 
     if(ii<3) c_i=0; 
     else 
      if(ii>1 && ii<2) c_i=3;  
      else if(ii>2 && ii<=3) c_i=6; 

     if(jj<3) c_j=0; 
     else 
      if(jj>1 && jj<2) c_j=3;  
      else if(jj>2 && jj<=3) c_j=6; 

     for(int i=c_i;i<c_i+3;i++){ 
      for(int j=c_j;j<c_j+3;j++){ 
       if(test==a[c_i][c_j]) return non_valide; 
      } 
     } 
      return valide; 
     } 
    public static void main(String[] args) { 
     int [][] soduko2={ 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0}, 
       {0,0,0,0,0,0,0,0,0} 
      }; 
     Random r=new Random(); 
     for(int i=0;i<9;i++){ 
      for(int j=0;j<9;j++){ 
       int entier=r.nextInt(9)+1; 
       boolean init =checkInt(soduko2,entier,i,j); 
       while(init ==non_valide){ 
        entier=r.nextInt(9); 
        init =checkInt(soduko2,entier,i,j); 
       } 
       if(init=true) 
        soduko2[i][j]=entier; 
      } 
      } 
     for(int i=0;i<9;i++){ 
      for(int j=0;j<9;j++){ 
       System.out.println(soduko2[i][j]+","); 
      } 
     } 
     System.out.println("Done!"); 

    } 

} 
+0

-1 "Bitte sagen Sie mir über die Schreibweise und bearbeiten Sie den Code für mich bitte" - "der richtige Weg", und Bearbeiten von Code, wie Sie wollen, ist nicht die Art, wie SO funktioniert – ControlAltDel

+0

Das Problem ist mit Ihrem Board Füllung Algorithmus. Die Art, wie Sie füllen, kann Sie am Ende verlassen, wo keine gültigen Werte für ein gegebenes Quadrat verfügbar sind. In diesem Fall wird Ihr Programm blockiert Zufallszahlen generieren, von denen keiner jemals funktionieren wird. Sie brauchen einen besseren Algorithmus – ControlAltDel

+0

Ich denke nicht, weil es alle Sudoko jedes Mal testen – Katty

Antwort

1

Zuerst Die Bedingung (ii>1 && ii<2) immer falsch sein wird, weiß nicht, ob dies ein Problem

Zweite sein, die Bedingung (ii>2 && ii<=3) nur wahr ist, wenn ii==3

Vielleicht wird dieser Teil der sein Problem

+0

Ich mache das Sub-Grid einchecken Kommentar und Dasselbe Problem – Katty

Verwandte Themen