La table de sudoku qui foire

lkm Messages postés 43 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 23 novembre 2007 - 31 janv. 2006 à 17:25
lkm Messages postés 43 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 23 novembre 2007 - 5 févr. 2006 à 11:52
Bonjour à tous, ceci est mon premier message sur javafr.com. En effet je débute en Java (mais pas en programmation) et je me suis dit que pour débuter, je coderai bien un petit applet java de sudoku pour mon site.
Le problème que j'ai est plus un soucis de programmation que de problème avec java.

Je vous explique comment je procède pour générer ma table (compète) de sudoku.
-j'initialise ma table à 2 dimensions : 9x9 cases.
- ensuite je remplis ma première ligne en vérifiant pour chaque ajout que le chiffre (aléatoire entre 1 et 9) à insérer n'est pas dans la table. Ceci fonctionne très bien et si j'utilise que cette fonction la table de sudoku est cohérente sur les lignes.
J'ai réalisé la même fonction mais pour les colonnes et si je l'utilise (sans utiliser la fonction ligne) j'ai une table sudoku cohérente sur les colonnes.
Maintenant si j'utilise les 2 fonctions en faisant un ET entre les 2, ça foire complétement.
Pourquoi je ne le sais pas peut être avez vous la réponse.
Voici mon code:

import java.util.Random;


public class sudoku {
//initialisation du tableau
public static int[][] init_tableau_sudoku(int[][] table){
for(int i=0; i<9; i++){
for(int j=0;j<9;j++){
table[i][j] = -1;
}
}
return table;
}
//vérifie si la valeur est dans la ligne
public static boolean in_array_ligne(int valeur, int[][] table, int indiceligne, int indicecolonne){
for(int i=-1; i


public static void main(String[] args) {
System.out.println("Bonjour tout le monde!");
int table_sudoku[][] = new int[9][9];
String mike = "|";
sudoku obj_sudoku = new sudoku();
table_sudoku = obj_sudoku.genere_sudo();
for(int i = 0;i<9;i++){
for(int j=0;j<9;j++){
mike += table_sudoku[i][j] + "|";
if(j == 8){mike += "\n|";}
}
}
System.out.println(mike);

}


}
lkm

2 réponses

eddyger Messages postés 20 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 13 décembre 2010
31 janv. 2006 à 20:43
Bonjour,

(ne connaissant pas le sudoku je suis aller voir http://www.e-sudoku.fr/regle-grille-sudoku.php)
Je pense que ton test au niveau du while devrait être plutôt un OU plutot qu'un ET :
while( in_array_ligne(valeur_test,table,j,i) || in_array_colonne(valeur_test,table,j,i) )

ed
0
lkm Messages postés 43 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 23 novembre 2007
5 févr. 2006 à 11:52
Tu as entièrement raison, le pire c'est que j'avais vérifié, que j'avais bien trouvé une fonction OU mais le truc c'est que quand je met une fonction OU, j'ai l'impression de rentrer dans une boucle infinie, mon algorithme met 10 plombes à s'executer.
J'y ai réfléchi et j'ai peut être trouvé une feinte pour parer ça.
Je vous tiens au courant, je reste également ouvert à des propositions.

lkm
0
Rejoignez-nous