Sudoku en javascool

14 views
Skip to first unread message

frimane...@gmail.com

unread,
May 13, 2018, 7:21:43 AM5/13/18
to Java's Cool
Bonjour, j'ai un projet à faire en isn, et j'ai choisi de programmé un sudoku en javascool 
mais je suis bloquer sur une parti, la compilation marche mais pas l’exécution et je n'arrive pas a trouvé d'ou viens le problème 
c'est a la boucle while(!creation) que sa ne marche pas 
merci d'avance 
<code>
void Couleur(int[][] grille) {
   int largeur = grille.length;
   int hauteur = grille[0].length;
   for (int x = 0; x <= (largeur -1); x = x +1) {
      for (int y = 0; y <= (hauteur -1); y = y +1) {
         if (grille[x][y] ==1) {
            setPixel(x, y -3, 0, 0, 0);
            setPixel(x, y -2, 0, 0, 0);
            setPixel(x, y -1, 0, 0, 0);
            setPixel(x, y, 0, 0, 0);
            setPixel(x, y +1, 0, 0, 0);
            setPixel(x, y +2, 0, 0, 0);
            setPixel(x, y +3, 0, 0, 0);
            setPixel(x -1, y -2, 0, 0, 0);
            setPixel(x -1, y +3, 0, 0, 0);
            setPixel(x +1, y +3, 0, 0, 0);
         } else if (grille[x][y] ==2) {
            setPixel(x -2, y -2, 0, 0, 0);
            setPixel(x -1, y -3, 0, 0, 0);
            setPixel(x, y -3, 0, 0, 0);
            setPixel(x +1, y -3, 0, 0, 0);
            setPixel(x +2, y -2, 0, 0, 0);
            setPixel(x +2, y -1, 0, 0, 0);
            setPixel(x +1, y, 0, 0, 0);
            setPixel(x, y +1, 0, 0, 0);
            setPixel(x -1, y +2, 0, 0, 0);
            setPixel(x -2, y +3, 0, 0, 0);
            setPixel(x -1, y +3, 0, 0, 0);
            setPixel(x, y +3, 0, 0, 0);
            setPixel(x +1, y +3, 0, 0, 0);
            setPixel(x +2, y +3, 0, 0, 0);
         } else if (grille[x][y] ==3) {
            setPixel(x -2, y -2, 0, 0, 0);
            setPixel(x -1, y -3, 0, 0, 0);
            setPixel(x, y -3, 0, 0, 0);
            setPixel(x +1, y -3, 0, 0, 0);
            setPixel(x +2, y -2, 0, 0, 0);
            setPixel(x +2, y -1, 0, 0, 0);
            setPixel(x, y, 0, 0, 0);
            setPixel(x +1, y, 0, 0, 0);
            setPixel(x, y +3, 0, 0, 0);
            setPixel(x +2, y +1, 0, 0, 0);
            setPixel(x -2, y +2, 0, 0, 0);
            setPixel(x +2, y +2, 0, 0, 0);
            setPixel(x -1, y +3, 0, 0, 0);
            setPixel(x, y +3, 0, 0, 0);
            setPixel(x +1, y +3, 0, 0, 0);
         } else if (grille[x][y] ==4) {
            setPixel(x +1, y -3, 0, 0, 0);
            setPixel(x, y -2, 0, 0, 0);
            setPixel(x -1, y -1, 0, 0, 0);
            setPixel(x -2, y, 0, 0, 0);
            setPixel(x +1, y, 0, 0, 0);
            setPixel(x -2, y +1, 0, 0, 0);
            setPixel(x -1, y +1, 0, 0, 0);
            setPixel(x, y +1, 0, 0, 0);
            setPixel(x +1, y +1, 0, 0, 0);
            setPixel(x +2, y +1, 0, 0, 0);
            setPixel(x +1, y +2, 0, 0, 0);
            setPixel(x +1, y +3, 0, 0, 0);
         } else if (grille[x][y] ==10) {
            setPixel(x, y, 0, 0, 0);
         }
      }
   }
}

// Partie Léa
// Ici les grilles sont de taille 9x9
boolean creation(int[][]GRILLE, int x, int y) {
   int[] LISTE = new int[4];
   LISTE[0] = random(1, 5);
   for (int i = 1; i < 4; i ++) {
      for (boolean valable = false; ! valable;) {
         // quand le nombre aléatoire tiré est déjà dans la liste
          LISTE[i] = random(1, 5);
         valable = true;
         for (int j = 0; j < i; j ++) {
            if (LISTE[i] == LISTE[j]) {
               valable = false;
            }
         }
      }
   }
   for (int i = 0; i < 4; i ++) {
      if (check(GRILLE, x, y, LISTE[i])) {
         GRILLE[x][y] = LISTE[i];
         if ((x == 3) && (y == 3)) {
            return  true;
         }
         if (x == 3) {
            if (creation(GRILLE, 0, y +1)) {
               return  true;
            }
         } else {
            if (creation(GRILLE, x +1, y)) {
               return  true;
            }
         }
      }
   }
   GRILLE[x][y] =0;
   return  false;
}

boolean check(int[][]GRILLE, int x, int y, int a) {
   for (int i = 0; i < x; i ++) {
      if (GRILLE[i][y] == a) {
         return  false;
      }
   }
   for (int j = 0; j < y; j ++) {
      if (GRILLE[x][j] == a) {
         return  false;
      }
   }
   int xx = (x /3) *3;
   int yy = (y /3) *3;
   for (int i = 0; i < 3; i ++) {
      for (int j = 0; j < 3; j ++) {
         if (GRILLE[xx + j][yy + i] == a) {
            return  false;
         }
         if ((xx + j == x) && (yy + i == y)) {
            return  true;
         }
      }
   }
   return  true;
}

void main() {
   // PARTIE LEA
    int[][] TABLEAU = new int[4][4];
   while ( ! creation(TABLEAU, 0, 0)) {
      // creation peut rater, mais c'est rare.  
    }
   int d,e,z, a;
   int grille[][] = new int[48][48];
   // PARTIE PIERRE 
    //Remplissage des cases
    int tabx, taby;
   tabx = 0;
   for (d =7; d < 48; d = d +11) {
      taby =0;
      for (e =7; e < 48; e = e+11) {
         grille[d][e] = TABLEAU[tabx][taby];
         taby = taby +1;
      }
      tabx = tabx +1;
   }
   reset(48, 48, false);
   Couleur(grille);
}
</code>

OIJUHJKL.jvs

Thierry Vieville

unread,
May 14, 2018, 3:25:25 AM5/14/18
to java...@googlegroups.com, frimane...@gmail.com

 Bonjour


Ah oui mais si création tableau rente la boucle va tourner indéfiniment je vous propose de mettre un print dans la boucle pour vérifier qu'effectivement ça ne boucle pas,  vous avez aussi le même problème dans la boucle

    for (boolean valable = false; ! valable;) {

 Mettez un rpint dans la boucle  de façon à voir si elle ne boucle pas indéfiniment

 Bien cordialement.   

--

---
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "Java's Cool".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse javascool+...@googlegroups.com.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages