Forum Clubic

JAVA Jeux SUDOKU - Comment compléter ce code !

Bonjour à tous,

Je débute en JAVA et souhaite faire 3 boucles sur ce code. J’ai fait la 1ère boucle qui contrôle la 1ère ligne et 1ère colonne du tableau, une 2ème boucle qui contrôle la 1ère zone et la 3ème boucle qui contrôle le tableau.


       public class SodokuTest {
      
      //initialisation du tableau
      private int tab[][] = {
        {3,7,0,0,0,0,0,6,0},
        {0,0,8,3,1,5,0,0,0},
        {4,9,0,0,0,7,2,5,0},
        {0,4,3,8,0,0,0,0,0},
        {6,0,0,5,0,4,0,0,7},
        {5,0,0,0,0,9,4,1,0},
        {0,2,7,9,0,0,0,4,8},
        {0,0,0,2,7,6,1,0,0},
        {0,5,0,0,0,0,0,3,2}
        };
      
      
      
      
      public static void main(String[] args) {
        
        System.out.println ("Demarage de l'application so do kuTest "+ "\n");
        
         SodokuTest sodoku = new SodokuTest();
         sodoku.afficheTableau();
         System.out.println ("fin de l'application so do kuTest"); 
      }
      
      //constructeur
      public SodokuTest(){
        if (!this.controlTableau()){
          System.out.println("les données d'initialisation sont erronées");
          
          }
        
        }
        
        //affiche le tableau a l'ecran
        public void afficheTableau(){
     String tableau = "";
     for(int i = 0; i<tab.length;i++){
      tableau += this.construitLigne(i)+"\n";
      
      }
      System.out.println(tableau);
      }  
     
      // construit l'affichage d'une ligne du tableau
        
      private String construitLigne(int noLigne){
        String ligne = "";
        for(int i = 0; i<tab.length;i++){
            ligne += tab[noLigne][i]+ " ";
        }
        ligne=ligne.replace("0","");
        return ligne;
      }
      //le return true est la pour pouvoir compiler... à enlever
      
      private boolean controlTableau(){return true;}
      private boolean controlZone (int zone){return true;}
      private boolean controlLigne (int ligne){return true;}
      
      private boolean testValid(int petitTab[]){
      //Controle que le tableau petitTab ne comprenne pas de valeur similaire sauf 0
      boolean valid = true;
      for(int i = 0; i < petitTab.length; i ++){
      	if (petitTab[i] > 0){
        for(int i2 = i + 1; i2 < petitTab.length; i2 ++){
        	if (petitTab[i2] > 0){
          if(petitTab[i] == petitTab[i2]){
          	valid = false;
          }
        	}	
        }	
      	}
      }
      
      return valid;
    	}
      
    
}

ce n’est pas un probleme de java mais d’algorithme, a apprendre avant tout plongeon dans n’importe quel language de programmation
…et indente, c’est la premiere chose qu’on apprends

me suis pas encore penché sur l’algo pour générer / checker les tables de sudoku, mais je crois que ton tableau va etre un peut dur a traité vu comme tu l’a construit !
c’est 9 tableaux de 3x3, pas 9 de 1x9
de plus les dimensions sont fixe, mets de préférences des dimensions statiques a ton/tes tableaux

C’est tout de suite mieux là…

Si tu veux régler ton prob de Sudoku, c’est pas très compliqué hein… soit tu sommes jusqu’à avoir 1+…+9 dans chaque case (sachant que 1+8+8+1=9+9+0+0+0+0+0+0), soit tu fais un tableau de 10 booléens que tu remplis de false, et que tu mets à true à chaque chiffre que tu as (sachant t[chiffre])

etc…

Juste comme ça,

S’il n’y a plus de 0, qu’on a limité la saisie aux chiffres 1-9, que la somme de chaque ligne, chaque colonne et chaque “petit carré” est égale à 45…

Est-ce que ces conditions ne sont pas suffisantes pour définir un Sudoku valide?

A priori oui :slight_smile:
je pense que le plus hardu dans un sudoku c’est pas de savoir si le joueur a gagner ou non, mais de générer la grille, et enlever les bonnes cases pour qu’il soit resolvable

Toujours comme ça,

Générer une grille pleine ne me semble pas si difficile que ça… Par contre enlever les ‘bonnes’ cases…

En prenant les règles qui permettent de reconstituer un grille incomplète… Y’a des fanas de Prolog?