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<indicecolonne; i++){
if(table[indiceligne][i+1] == valeur){
return true;
}
}
return false;
}
// vérifie si la valeur est dans la colonne
public static boolean in_array_colonne(int valeur, int[][] table, int indiceligne, int indicecolonne){
for(int i=-1; i<indiceligne;i++){
if( table[i+1][indicecolonne] == valeur){
return true;
}
}
return false;
}
// genere le sudoku
public int[][] genere_sudo(){
Random valeur_t = new Random();
int table[][] = new int[9][9];
table = init_tableau_sudoku(table);
int valeur_test = -1;
for(int j=0; j<9;j++){
for(int i=0; i<table.length; i++){
valeur_test = -1;
while( in_array_ligne(valeur_test,table,j,i) && in_array_colonne(valeur_test,table,j,i) ){
valeur_test = valeur_t.nextInt(9)+1;
}
table[j][i] = valeur_test;
}
}
return table;
}
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