Bonjour
Voila je suis en train de créer un sudoku. Plus précisement, je veux générer une solution dans un tableau 9x9.
Donc je parcours mon tableau[9][9], et je génère des chiffres aléatoires de 1 à 9, vérifiant s'ils sont déjà sur la même ligne , même colonne et même bloc.(la fonction qui vérifie si le chiffre existe déjà est constituée de 3 boucles, qui regardent la ligne , la colonne et le bloc qui contienent la case à traiter.

Sauf que voilà a l'execution, j'ai une boucle infinie. En effet, lorsque je mets la partie vérification d'un bloc et de colonne en commentaire, je crée un sudoku dont les chiffres vérifient juste l'unicité des chiffres des lignes.
Voici mon code:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
public static void initGame() {
        ResolutionTableau[0][0] = (int) (Math.random() * 9 + 1);
        int coin = ResolutionTableau[0][0];
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if (i != 0 || j != 0) {
                    while (verifyIfNumberAlreadyExist(i, j, ResolutionTableau, coin)) {
                        boolean stretch = false;
                        if (stretch == false) {
                            coin = (int) (Math.random() * 9 + 1);
                            System.out.println("coin " + coin);
                        } else {
                            coin = (coin + 1) % 10;
                        }
                        // System.out.println("case " + i + " ligne et " + j + "colonne");
                        System.out.println("Resolution " + ResolutionTableau[i][j]);
                        System.out.println("Resolution " + i + " and" + j);
                        stretch = true;
                    }
                    ResolutionTableau[i][j] = coin;
                }
            }
        }
    }
    public static boolean verifyIfNumberAlreadyExist(int i, int j, int[][] tableau, int numeroaverifier) {
        boolean result = false;
        //On vérifie sur cette boucle si le chiffre existe déjà sur la même ligne
       /* if (j > 0) {
            for (int l = 0; l < j; l++) {
                if (numeroaverifier == tableau[i][l]) {
                    result = true;
                    // System.out.println(+numeroaverifier);
                    System.out.println(result + " meme ligne avec " + i + " colonne" + l + "avec comme valeur " + tableau[i][l]);
                    return result;
                }
            }
        }
        /*if (i > 0) {
            for (int k = 0; k < i; k++) {
                if (numeroaverifier == tableau[k][j]) {
                    result = true;
                    System.out.println(result + " meme ligne avec " + i + " colonne" + "avec comme valeur ");
                    return result;
                }
            }
        }*/   if (i % 3 != 0 || j % 3 != 0) {
            for (int l = i - i % 3; l < i -i%3+3; l++) {
                for (int k = j - j % 3; k < j -j%3+3; k++) {
                    if (i != l || j != k) {
                        if (numeroaverifier == tableau[l][k] && tableau[l][k] != 0) {
                            result = true;
                            System.out.println(result +" et meme carre");
                            return result;
                        }
                    }
                }
            }
        }
        return result;
    }

Merci