IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Afficher une grille de sudoku


Sujet :

avec Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 31
    Points : 2
    Points
    2
    Par défaut Afficher une grille de sudoku
    Bonjour, je suis actuellement en Terminale S avec comme spé ISN (informatique et sciences du numérique). L'épreuve pour le bac arrive et la création de mon jeu n'avance plus depuis quelques semaine car je suis bloqué...
    A vrai dire je ne suis pas très doué et le professeur souvent absent n'arrange pas les choses. Pour le moment j'ai réussi a créer une grille et mettre des numéros de 0 à 8. J'aimerais que quelqu'un m'aide a faire une grille avec les numéros de mon choix et aussi pourvoir insérer des chiffres (pour jouer).
    Ah oui et j'ai aussi un problème avec la lecture de mon fichier .txt que je n'arrive pas à résoudre.
    Merci d'avance pour votre aide.
    Mon code actuelle est :

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    import java.awt.Color;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
     
    import acm.graphics.GLabel;
    import acm.graphics.GRect;
    import acm.program.GraphicsProgram;
     
     
    public class sudo1 extends GraphicsProgram{
    	public GRect fond;
     
    	public int bord = 100;
    	public int tailleCase = 50 ;
    	public int espaceCase = 10 ;
     
    	public  GRect [][] bloc = new GRect[3][3];
    	public  GRect [][] cellule = new GRect[9][9];
    	public static int [][] valCase = new int [9][9];
    	public int [][] modifCase = new int [9][9];
    	public static  GLabel [][] texteCase = new GLabel[9][9];
     
    	public void init() {
    		fond = new GRect(bord,bord,9*tailleCase+10*espaceCase,9*tailleCase+10*espaceCase);
    		fond.setFillColor(Color.BLUE);
    		fond.setFilled(true);
    		add(fond);
     
    		//Création des blocs 3x3 :
    		for (int indX=0; indX<3;indX++) {
    			for (int indY=0; indY<3;indY++) {
    				bloc[indX][indY]= new GRect(bord+espaceCase+indX*3*espaceCase+indX*3*tailleCase,bord+espaceCase+indY*3*espaceCase+indY*3*tailleCase, 
    						3*tailleCase+2*espaceCase,3*tailleCase+2*espaceCase);
    				bloc[indX][indY].setFillColor(Color.WHITE);
    				bloc[indX][indY].setFilled(true);
    				add(bloc[indX][indY]);
    			}
    		}
    		// création des cases :
    		for (int indX=0; indX<9;indX++) {
    			for (int indY=0; indY<9;indY++) {
    				cellule[indX][indY]= new GRect(bord+(1+indX)*espaceCase+indX*tailleCase,bord+(1+indY)*espaceCase+indY*tailleCase, tailleCase,tailleCase);
    				cellule[indX][indY].setFillColor(Color.LIGHT_GRAY);
    				cellule[indX][indY].setFilled(true);
    				add(cellule[indX][indY]);
    				valCase[indX][indY]=indX;
    				texteCase[indX][indY] = new GLabel(String.valueOf(valCase[indX][indY]),bord+(1+indX)*espaceCase+(0.4+indX)*tailleCase,
    						bord+(1+indY)*espaceCase+(0.6+indY)*tailleCase);
    				add(texteCase[indX][indY]);
    			}
    		}
     
    		//lecture();
    		ecriture();
     
    	}
    	public static void ecriture() { 
    			String ligne ;
    			int nombre = 123;
    			BufferedWriter fichier;
    			try {
    				fichier = new BufferedWriter(new FileWriter("Toto.txt"));
    				fichier.write("bonjour tout le monde");
    				fichier.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
     
    			System.out.println("fichier créé");
    		}
     
     
    	public static void lecture() throws IOException {
    		int table[] = new int[100];
    		BufferedReader Lecteur = null;
    		try {
    			Lecteur = new BufferedReader(new FileReader("Toto.txt"));
     
    		}
    		catch(FileNotFoundException exc) {
    			System.out.println("erreur");
    		}
    	    String[] ligne = new String[1000];
    		int index = 0;
    		index = 0;
    		while ((ligne[index] = Lecteur.readLine()) != null) {
    			System.out.print("ligne : ");
    			System.out.print(index);
    			System.out.print(" > ");
    			System.out.println(ligne[index]);
    			table[index]=Integer.parseInt(ligne[index]);
    			index++;
    		}
    		for (int indX=0; indX<3;indX++) {
    			for (int indY=0; indY<3;indY++) {
    				valCase[indX][indY]= table[indX+9*indY]; 
    				texteCase[indX][indY].setLabel(String.valueOf(valCase[indX][indY]));
    			}
    		} 
     
    	}
     
     
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il va falloir être plus précis sur la description de tes problèmes. A part quelques évidences sur la partie fichier, difficile de deviner quels sont tes problèmes.

    Déjà, en préambule, utiliser JTF soi-disant pour contourner certains difficultés de Java, un machin datant de 2006 (mis à jour en 2008) est pour moi une abbération. Si c'est le prof qui vous oblige à ça, c'est bien dommage. Sinon, vire-moi ça et profite des avancées de Java 8, ou au moins Java 7.

    En ce qui concerne la lecture de fichier, pourquoi utiliser un tableau de lignes (Strng[] line) : ça ne sert à rien (tu ne l'utilises qu'au moment de convertir en entier pour remplir le tableau table). Tout ce qui est en trop contribue à la difficulté de compréhension des problèmes dans un programme. Une simple variable String est suffisante.
    Ensuite, si tu essayes de lire un fichier que ta méthode ecriture() a écrit, ce n'est pas étonnant que ça ne fonctionne pas : dans l'écriture, tu écris juste la phrase "bonjour le monde" : quelque chose qui ne risque pas de pouvoir être converti en entier par un Integer.parseInt(). En plus, la première fois, il faut penser que le fichier n'existe pas forcément.

    Ensuite, normalement, on remplit une grille standard de sudoku par des chiffres de 1 à 9, pas de 0 à 8. Pour la remplir de nombres de son choix, de manière à ce qu'il y ait suffisamment d'indices pour qu'elle soit soluble, je dirais qu'il y a un moyen simple : procéder par table de correspondances, comme on procéderait si on voulait faire une grille de suduko avec des lettres par exemple. La méthode de remplissage serait donc exactement identique à la méthode standard, sauf qu'au lieu de mettre directement le chiffre de 1 à 9, on mettrait à la place son correspondant dans la table.

    Je ne vois nulle part de code qui permet d'obtenir une grille "mélangée", c'est normal ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 31
    Points : 2
    Points
    2
    Par défaut
    Salut,

    Merci pour ta réponse tout d'abord. Pour la version de java, je n'y suis pour rien. J'utilise le programme présent sur l'ordinateur au lycée à savoir éclipse. Surement pas le meilleur mais il est gratuit et donc largement mieux pour nous (on peut l'avoir chez nous).
    Je vais donc remplacer (Strng[] line) par String ? Cela ne change rien si ?
    J'ai créé un fichier.txt dans lequel normalement je rentre les chiffres que je souhaite mettre dans la grille. Car forcément je ne veux pas tous les chiffres a l'intérieur, seulement un nombre suffisant de chiffres pour permettre la résolution progressive et complète de la grille. En soit, je rentre par exemple 108005080 (les 0 correspondent a rien dans la case), ces chiffres correspondraient a une ligne de sudoku avec seulement le 1,8,5,8 présent dans la ligne.
    Plus généralement ce que j'essaie de faire c'est pouvoir modifier les chiffres présent dans la grille comme je le souhaite et de mettre un carré vide ou je peux cliquer dessus et compléter la grille.
    Malheureusement je n'y arrive pas du tout, et l'idée du fichier.txt je sais pas si c'est une bonne idée.
    Voilà, j'espère que c'est plus clair.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ce n'est pas tant la version de Java que l'utilisation d'une bibliothèque externe qui n'apporte à mon avis que de la complexité supplémentaire, d'autant qu'elle n'a aucun intérêt aujourd'hui et que tu trouveras pas beaucoup de monde qui peut te répondre sur des questions spécifiques à cette bibliothèque (je parle de JTF). Et ça encore moins de rapport avec Eclipse (et qu'Eclipse soit meilleur ou pas qu'un autre EDI est plus une affaire de goûts personnels, d'habitudes et de préférences (tout est toujours une histoire de compromis entre ce qu'on aimerait avoir, ce qu'on a, et ce qu'on aime bien avoir, de compromis entre avantages et inconvénients).

    Si je comprends bien ta question ne porte pas sur la génération automatique d'une grille, mais sur le remplissage d'une grille à partir d'un fichier qui contient déjà les valeurs aux bons endroits ?
    L'idée du zéro pour les cases vides n'est pas mauvaise. Mais je le répète : il te faudra gérer les chiffres de 0 à 9, et non de 0 à 8.
    Comme tu convertis les chiffres en String pour les mettres dans un GLabel, il te suffit de faire un simple test pour remplir les cases. Par exemple, là où tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texteCase[indX][indY].setLabel(String.valueOf(valCase[indX][indY]));
    tu ferais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ( valCase[indX][indY]==0 ) {
        texteCase[indX][indY].setLabel(""); // case vide
    } else {
        texteCase[indX][indY].setLabel(String.valueOf(valCase[indX][indY]));
    }
    En revanche, c'est étrange que tu fasses une boucle de 0 à 3 exclu, et non de 0 à 9 exclu. Est-ce que ça veut dire que chaque GLabel constitue un bloc 3x3 ? Dans ce cas, je ne vois pas bien comment tu gères ce bloc avec un entier... En principe, il vaudrait mieux de tout manière gérer un modèle qui n'ait pas de lien avec les classes graphique, puis de l'associer ensuite à l'affichage (selon les possibilités de la bibliothèque graphique, et, là, concernant JTF, je ne peux rien dire de plus vu que je ne connais pas).

    Ensuite, pour la partie fichier le fait de remplacer le tableau par une String change évidemment quelque chose, puisque le type de la variable n'est pas le même, mais c'est assez mineure.

    Voici ton code de lecture :
    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
    int table[] = new int[100];
    		BufferedReader Lecteur = null;
    		try {
    			Lecteur = new BufferedReader(new FileReader("Toto.txt"));
     
    		}
    		catch(FileNotFoundException exc) {
    			System.out.println("erreur");
    		}
    	    String[] ligne = new String[1000];
    		int index = 0;
    		index = 0;
    		while ((ligne[index] = Lecteur.readLine()) != null) {
    			System.out.print("ligne : ");
    			System.out.print(index);
    			System.out.print(" > ");
    			System.out.println(ligne[index]);
    			table[index]=Integer.parseInt(ligne[index]);
    			index++;
    		}
    Une petite remarque au préalable : tu affiches une erreur lorsque le fichier n'est pas trouvé, mais tu continues quand même à charger des données, d'un fichier qui n'existe pas. S'il y a une erreur, autant s'arrêter de suite.
    Ensuite, pour simplifier le code, il vaut mieux initialiser les variables dans la même instruction que leur déclaration. On gagne en lisibilité.
    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
    int table[] = new int[100]; // un tableau suffisamment grand pour lire une grille de 9x9 devrait faire 81 cases, mais 100 ça fonctionne
    		BufferedReader Lecteur = null;
    		try {
    			Lecteur = new BufferedReader(new FileReader("Toto.txt"));
     
                            // remplis ici ta grille
    	                String ligne;  // pas besoin d'un tableau, puisqu'on lit ligne à ligne
    		        int index = 0; // déclaration et initialisation dans la même instruction
    		       while ((ligne = Lecteur.readLine()) != null) {
    			    System.out.print("ligne : ");
    			    System.out.print(index);
    			    System.out.print(" > ");
    			    System.out.println(ligne);
    			    table[index]=Integer.parseInt(ligne);
    			    index++;
    		       }
                           /*... remplissage de la grille graphique (GLabel ou autre) ...*/
    		}
    		catch(FileNotFoundException exc) {
    			System.out.println("erreur");
    		}
    Ensuite, quelques remarques supplémentaires :
    1. lorsqu'on lit un fichier, il peut y avoir d'autre erreur qu'un problème de fichier manquant : il faut toutes les gérer, donc catcher IOException, ou faire un throws de cette exception
    2. Il est indispensable de fermer un flux après s'en être servi, surtout si c'est un fichier. Il faut donc appeler la méthode close() de BufferedReader dans tous les cas.
      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
      BufferedReader Lecteur = null;
      		try {
      			Lecteur = new BufferedReader(new FileReader("Toto.txt"));
       
                              // remplis ici ta grille
                              /*...*/
       
      		}
      		catch(IOException exc) {
      			System.out.println("erreur");
                              exc.printStackTrace(); // il est toujours intéressant de connaitre l'erreur si on veut pouvoir la traiter
      		}
                      finally {
                            // s'exécute toujours
                            if ( Lecteur!=null ) {
      		           try {
                                        Lecteur.close();
                                 } catch( IOException exc) {
      			           System.out.println("Fichier mal fermé");
                                         exc.printStackTrace(); 
                                 }
                            }
                      }
      En Java 7, on peut écrire ça plus simplement :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
       
      		try (BufferedReader Lecteur = Files.newBufferedReader(Paths.get("toto.txt")) {
       
                              // remplis ici ta grille
                              /*...*/
       
      		}
      		catch(IOException exc) {
      			System.out.println("erreur");
                              exc.printStackTrace(); // il est toujours intéressant de connaitre l'erreur si on veut pouvoir la traiter
      		}
    3. Tu peux regrouper tes 4 lignes de System.out :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      System.out.println("ligne : " + index + " > " + ligne);
    4. Il faudrait éventuellement catcher NumberFormatException qui survient si la ligne ne peut pas être convertie en int : ce qui arrive si le fichier n'est pas correctement saisi à l'origine
      Eventuellement, il faudrait ajouter un test pour vérifier que le chiffre est bien compris entre 0 et 9 inclus.
    5. Eventuellement, ajouter un moyen à l'appelant de la méthode de savoir que la grille n'a pas pu être remplie (en retournant un booléen par exemple)
    6. Il serait intéressant que la méthode ne remplisse pas directement l'interface graphique mais qu'elle retourne une grille (un tableau de int par exemple, ou mieux une classe qui représente une grille). Et de faire le remplissage complètement à part. Ceci permettrait de remplir la grille graphique par une grille chargée depuis un fichier, ou générée aléatoirement, ou autre.
    7. La convention en Java pour les noms de variables est leur nom commence par une minuscule (lecteur donc et pas Lecteur). C'est une habitude qui facilite la lecture du code par tout le monde.
    8. Il y a d'autres petites choses, mais a ton niveau, c'est inutile d'aller aussi loin...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 31
    Points : 2
    Points
    2
    Par défaut
    Salut, tu m'aides beaucoup. Merci.

    J'ai donc ajouté les bouts de code que tu m'a donné et aussi un try/catch pour la lecture. Je mes mon code a la fin de mon message, je m'excuse d'avance mais je ne sais pas mettre la balise.

    Une fois l'applet lancée, cela donne:

    https://gyazo.com/2e6d1dd9bed7b29d0545a6f7cfc9c466

    Le Fichier Toto de cette applet est:

    https://gyazo.com/98cf77ce5da4dee5272177652c1a6148

    Je n'ais mis que 9 chiffres dans le fichier et la répartition de ceux-ci est incompréhensible. Mais en tout cas, les zéros donnent bien une case vide.
    Je rencontre un problème avec "Bonjour le monde". Car il faut que j'aille dans le fichier toto et remettre des chiffres et sauvegarder le fichier à chaque fois que je veux lancer l'applet sinon elle ne marche pas. Que faire avec "Bonjour le monde" pour que ce que je mette dans le fichier reste tout le temps ?

    En ce qui concerne la fin de ton message je n'ai pas tout compris, notamment :

    Il faudrait éventuellement catcher NumberFormatException qui survient si la ligne ne peut pas être convertie en int : ce qui arrive si le fichier n'est pas correctement saisi à l'origine
    Eventuellement, il faudrait ajouter un test pour vérifier que le chiffre est bien compris entre 0 et 9 inclus.
    Eventuellement, ajouter un moyen à l'appelant de la méthode de savoir que la grille n'a pas pu être remplie (en retournant un booléen par exemple)
    Il serait intéressant que la méthode ne remplisse pas directement l'interface graphique mais qu'elle retourne une grille (un tableau de int par exemple, ou mieux une classe qui représente une grille). Et de faire le remplissage complètement à part. Ceci permettrait de remplir la grille graphique par une grille chargée depuis un fichier, ou générée aléatoirement, ou autre.

    Mon code actuel:
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    package sudo1;
     
    import java.awt.Color;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
     
    import acm.graphics.GLabel;
    import acm.graphics.GRect;
    import acm.program.GraphicsProgram;
     
    public class sudo1 extends GraphicsProgram{
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	public GRect fond;
     
    	public int bord = 100;
    	public int tailleCase = 50 ;
    	public int espaceCase = 10 ;
     
    	public  GRect [][] bloc = new GRect[3][3];
    	public  GRect [][] cellule = new GRect[9][9];
    	public static int [][] valCase = new int [9][9];
    	public int [][] modifCase = new int [9][9];
    	public static  GLabel [][] texteCase = new GLabel[9][9];
     
    	public void init() {
    		fond = new GRect(bord,bord,9*tailleCase+10*espaceCase,9*tailleCase+10*espaceCase);
    		fond.setFillColor(Color.BLUE);
    		fond.setFilled(true);
    		add(fond);
     
    		//Création des blocs 3x3 :
    		for (int indX=0; indX<3;indX++) {
    			for (int indY=0; indY<3;indY++) {
    				bloc[indX][indY]= new GRect(bord+espaceCase+indX*3*espaceCase+indX*3*tailleCase,bord+espaceCase+indY*3*espaceCase+indY*3*tailleCase, 
    						3*tailleCase+2*espaceCase,3*tailleCase+2*espaceCase);
    				bloc[indX][indY].setFillColor(Color.WHITE);
    				bloc[indX][indY].setFilled(true);
    				add(bloc[indX][indY]);
    			}
    		}
    		// création des cases :
    		for (int indX=0; indX<9;indX++) {
    			for (int indY=0; indY<9;indY++) {
    				cellule[indX][indY]= new GRect(bord+(1+indX)*espaceCase+indX*tailleCase,bord+(1+indY)*espaceCase+indY*tailleCase, tailleCase,tailleCase);
    				cellule[indX][indY].setFillColor(Color.LIGHT_GRAY);
    				cellule[indX][indY].setFilled(true);
    				add(cellule[indX][indY]);
    				valCase[indX][indY]=indX;
    				texteCase[indX][indY] = new GLabel(String.valueOf(valCase[indX][indY]),bord+(1+indX)*espaceCase+(0.4+indX)*tailleCase,
    						bord+(1+indY)*espaceCase+(0.6+indY)*tailleCase);
    				add(texteCase[indX][indY]);
    			}
    		}
     
    		try {
    			lecture();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		ecriture();
     
    	}
    	public static void ecriture() { 
    			String ligne ;
    			int nombre = 123;
    			BufferedWriter fichier;
    			try {
    				fichier = new BufferedWriter(new FileWriter("Toto.txt"));
    				fichier.write("bonjour tout le monde");
    				fichier.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
     
    			System.out.println("fichier créé");
    		}
     
     
    	public static void lecture() throws IOException {
    		int table[] = new int[100]; // un tableau suffisamment grand pour lire une grille de 9x9 devrait faire 81 cases, mais 100 ça fonctionne
    		BufferedReader Lecteur = null;
    		try {
    			Lecteur = new BufferedReader(new FileReader("Toto.txt"));
     
                            // remplis ici ta grille
    	                String ligne;  // pas besoin d'un tableau, puisqu'on lit ligne à ligne
    		        int index = 0; // déclaration et initialisation dans la même instruction
    		       while ((ligne = Lecteur.readLine()) != null) {
    		    	   System.out.println("ligne : " + index + " > " + ligne);
    			    table[index]=Integer.parseInt(ligne);
    			    index++;
    		       }
                           /*... remplissage de la grille graphique (GLabel ou autre) ...*/
    		}
    		catch(FileNotFoundException exc) {
    			System.out.println("erreur");
    			 exc.printStackTrace(); // il est toujours intéressant de connaitre l'erreur si on veut pouvoir la traiter
    		}
    		finally {
                // s'exécute toujours
                if ( Lecteur!=null ) {
             try {
                            Lecteur.close();
                     } catch( IOException exc) {
    	           System.out.println("Fichier mal fermé");
                             exc.printStackTrace(); 
                     }
                }
          }
     
    		for (int indX=0; indX<3;indX++) {
    			for (int indY=0; indY<3;indY++) {
    				valCase[indX][indY]= table[indX+9*indY]; 
    				if ( valCase[indX][indY]==0 ) {
    				    texteCase[indX][indY].setLabel(""); // case vide
    				} else {
    				    texteCase[indX][indY].setLabel(String.valueOf(valCase[indX][indY]));
    				}
     
    			}
    		} 
     
    	}
     
     
    }

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    On va reprendre les points un par un.

    le fichier :
    0
    1
    0
    1
    0
    1
    0
    1
    0
    9 valeurs donc

    la boucle qui charge le fichier dans le tableau table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		       while ((ligne = Lecteur.readLine()) != null) {
    		    	   System.out.println("ligne : " + index + " > " + ligne);
    			    table[index]=Integer.parseInt(ligne);
    			    index++;
    		       }
    Résultat :
    table[0]=0;
    table[1]=1;
    table[2]=0;
    table[3]=1;
    table[4]=0;
    table[5]=1;
    table[6]=0;
    table[7]=1;
    table[8]=0;
    index vaut 9 et le reste du tableau est rempli de 0.

    la boucle qui transfert les valeurs dans l'affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (int indX=0; indX<3;indX++) {
    			for (int indY=0; indY<3;indY++) {
    				valCase[indX][indY]= table[indX+9*indY]; 
    				if ( valCase[indX][indY]==0 ) {
    				    texteCase[indX][indY].setLabel(""); // case vide
    				} else {
    				    texteCase[indX][indY].setLabel(String.valueOf(valCase[indX][indY]));
    				}
     
    			}
    		}
    Les valeurs successives de indX et indY :
    0 0 0+9*0=0
    0 1 0+9*1=9
    0 2 0+9*2=18
    1 0 1+9*0=1
    1 1 1+9*1=10
    1 2 1+9*2=19
    2 0 2+9*0=2
    2 1 2+9*1=11
    2 2 2+9*2=20
    Toutes les valeurs que j'ai mises en rouge sont supérieures à 8, la dernière case qui a pu être remplie lors de la lecture de ton fichier : donc forcément toutes ces valeurs sont à 0, donc cases vides.

    Si on prend la grille de sudoku, les indX et indY correspondant aux valeurs entre 0 et 2 incluses, les cases en questions correspondent à celle que j'ai remplies ci-dessous (les cases vides ne sont pas gérées par ta lecture) :
    indX=0, indY=0, donc table[0] indX=1, indY=0, donc table[1] indX=2, indY=0, donc table[2]
    indX=0, indY=1, donc table[9] indX=1, indY=1, donc table[10] indX=2, indY=1, donc table[11]
    indX=0, indY=2, donc table[18] indX=1, indY=2, donc table[19] indX=1, indY=2, donc table[20]
    Est-ce que tu comprends mieux ce résultat (j'y ai entouré en jaune les seules cases que ta lecture remplit) :
    Nom : Capture.JPG
Affichages : 1421
Taille : 65,1 Ko


    PS pour mettre la balise CODE, voir le MP que je t'ai envoyé.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 31
    Points : 2
    Points
    2
    Par défaut
    Oui j'ai bien compris mais comment faire pour contourner ce problème ?

    Car en faite je n'ais pas tout saisi, j'ai donc refait un test et il semble qu'il ne prend en compte que les chiffres 1 à 3 puis 9 à 12 (les 3 premiers de la série de 9)

    https://gyazo.com/00c0a6ee4d9ef266c6a341981231ab10

    Ps: merci pour la balise je n'avais pas vu.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il faut :
    1. que tes boucles parcourent l'ensemble de la grille
    2. que les valeurs dans le fichier correspondent aux coordonnées correspondantes à ce que ces boucles définissent. En nombre et en ordre.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 31
    Points : 2
    Points
    2
    Par défaut
    Il faut donc que je mette des chiffres plus élevés ? Dans cette partie du code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    for (int indX=0; indX<3;indX++) {
    			for (int indY=0; indY<3;indY++) {
    				valCase[indX][indY]= table[indX+9*indY]; 
    				if ( valCase[indX][indY]==0 ) {
    				    texteCase[indX][indY].setLabel(""); // case vide
    				} else {
    				    texteCase[indX][indY].setLabel(String.valueOf(valCase[indX][indY]));
    				}
     
    			}
    		}

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, pour commencer. 9 au lieu de 3 par exemple.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 31
    Points : 2
    Points
    2
    Par défaut
    Ok super ! Ce problème est réglé merci.
    Maintenant il me manque juste a pouvoir cliquer sur une case pour mettre un chiffre, en gros pour jouer au sudoku. Et pouvoir présenter un jeu qui tienne la route à l'oral. Sais-tu comment faire ?

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Attends, parce qu'il reste le problème du fichier et de "bonjour le monde". Si tu veux pour je ne sais quelle raison conserver cette phrase dans ton fichier : il va falloir modifier la lecture pour ignorer cette ligne lors du chargement. Le plus simple étant de la virer. Ensuite, il te faudra faire une boucle sur l'ensemble des cases et écrire leur valeur dans le fichier. Il faut bien sûr que l'ordre soit compatible avec la manière de le charger. Le plus simple est de copier le tableau valCase dans un tableau de int (int[] table=new int[81]; par exemple) en faisant la même double boucle que pour la lecture et en utilisant la même formule (table[indX+9*indY]=valCase[indX][indY];). Ensuite, tu parcours le tableau, et tu écris les valeurs dans le fichier.

    Sinon pour la partie interaction avec la souris, d'après la documentation de JTF, ça a l'air d'être identique à Swing, l'environnement graphique standard Java. Il faut enregistrer un écouteur d'évenement sur chaque objet GLabel.

    Tu peux enregistrer soit un écouteur bas niveau d'évenement souris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glabel.addMouseListener( mouseListener );
    Ou utiliser un écouteur d'action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glabel.addActionListener( actionListener );
    Pour mouseListener, il te faut une classe qui implémente l'interface MouseListener, ou un peu plus simple, une classe qui étend MouseAdapter. La méthode pour les deux qui t'intéresse est mouseClicked(MouseEvent).

    Pour actionListener, il te faut une classe qui implémente l'interface ActionListener : cette interface n'a qu'une seule méthode et sera donc plus simple à implémenter. Par exemple, là où tu instancies les GLabel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    texteCase[indX][indY] = new GLabel(String.valueOf(valCase[indX][indY]),bord+(1+indX)*espaceCase+(0.4+indX)*tailleCase,
    						bord+(1+indY)*espaceCase+(0.6+indY)*tailleCase);
    texteCase[indX][indY].addActionListener(new ActionListener() {
     
        public void actionPerformed(ActionEvent e) {
               clicSurCase(indX, indY);
        }
     
    });
    Tu ajoutes une méthode dans la classe sudo1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void clicSurCase(int indX, int intY) {
     
        // ici tu mets le code qui traite le clic
        // par exemple :
        if ( valCase[indX][indY] == 0 ) {
            // on a clické sur une case vide...
        }
     
    }
    Pour la saisie, comme
    1. Il y a une multitude façon de le faire (par touche du clavier, par menu, par dialogue, etc...)
    2. que je ne connais pas JTF, même s'il est probable que les techniques soient identiques (KeyEventDispatcher ou KeyEventListener par exemple pour écouter le clavier),

    il va falloir que tu cherches toi-même dans la documentation.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #13
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 31
    Points : 2
    Points
    2
    Par défaut
    J'ai supprimé la ligne "bonjour le monde". Mais je n'ais pas compris ce qu'il fallait faire ensuite. Je voudrais que le fichier garde les chiffres que je mette une fois pour toute, car là je dois a chaque fois remettre tous les chiffres dans le fichier.

    Pour le click, j'ai essayé quelques trucs mais sans succès. Je vais approfondir mes recherches, je te tiens au courant.

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par JusPomme Voir le message
    J'ai supprimé la ligne "bonjour le monde". Mais je n'ais pas compris ce qu'il fallait faire ensuite. Je voudrais que le fichier garde les chiffres que je mette une fois pour toute, car là je dois a chaque fois remettre tous les chiffres dans le fichier.
    Tu as lu ce que j'ai écrit : tu crées un tableau int[] table=new int[81];, tu copies valCase dedans, de la même façon que tu as fait la lecture (sauf que c'est l'inverse : au lieu de transférer de table vers valCase, tu transferts de vaCase vers table, puis tu parcours table et tu écris chaque ligne.

    Je ne fais que reprendre le code que tu as dans écriture (j'ai juste remplacé les 3 par 9 et inverser l'affectation)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int[] table=new int[81];
    for (int indX=0; indX<9;indX++) {
       for (int indY=0; indY<9;indY++) {
            table[indX+9*indY] = valCase[indX][indY];
       }
    }
    Pour écrire dans le fichier, tu fais :
    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
    BufferedWriter fichier = null;
       try {
           fichier = new BufferedWriter(new FileWriter("Toto.txt"));
     
           // et là tu écris chaque valeur de table dans le fichier
           for(int index=0; index<table.length; index++) {
                 fichier.write( String.valueOf( table[index] );
                 fichier.newLine(); // pour passer à la ligne
           }
     
       } catch (IOException e) {
              e.printStackTrace();
       } finally {
          if ( fichier != null ) {
             try {
                fichier.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
       }
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #15
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 31
    Points : 2
    Points
    2
    Par défaut
    Je remplace ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	for (int indX=0; indX<9;indX++) {
    			for (int indY=0; indY<9;indY++) {
    				valCase[indX][indY]= table[indX+9*indY]; 
    				if ( valCase[indX][indY]==0 ) {
    				    texteCase[indX][indY].setLabel(""); // case vide
    				} else {
    				    texteCase[indX][indY].setLabel(String.valueOf(valCase[indX][indY]));
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int[] table=new int[81];
    for (int indX=0; indX<9;indX++) {
       for (int indY=0; indY<9;indY++) {
            table[indX+9*indY] = valCase[indX][indY];
       }
    }
    Puis cette partie du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BufferedWriter fichier;
    			try {
    				fichier = new BufferedWriter(new FileWriter("Toto.txt"));
    				fichier.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
     
    			System.out.println("fichier créé");
    		}
    Par celui que tu m'a donné à savoir :
    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
    BufferedWriter fichier = null;
       try {
           fichier = new BufferedWriter(new FileWriter("Toto.txt"));
     
           // et là tu écris chaque valeur de table dans le fichier
           for(int index=0; index<table.length; index++) {
                 fichier.write( String.valueOf( table[index] );
                 fichier.newLine(); // pour passer à la ligne
           }
     
       } catch (IOException e) {
              e.printStackTrace();
       } finally {
          if ( fichier != null ) {
             try {
                fichier.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
       }
    }
    Est-ce que c'est ça ?

  16. #16
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par JusPomme Voir le message
    Je remplace ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	for (int indX=0; indX<9;indX++) {
    			for (int indY=0; indY<9;indY++) {
    				valCase[indX][indY]= table[indX+9*indY]; 
    				if ( valCase[indX][indY]==0 ) {
    				    texteCase[indX][indY].setLabel(""); // case vide
    				} else {
    				    texteCase[indX][indY].setLabel(String.valueOf(valCase[indX][indY]));
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int[] table=new int[81];
    for (int indX=0; indX<9;indX++) {
       for (int indY=0; indY<9;indY++) {
            table[indX+9*indY] = valCase[indX][indY];
       }
    }
    Non, surtout pas (tu vas bousiller la lecture : elle fonctionne la lecture, pas la peine de la modifier) : il faut mettre ça dans la méthode ecriture() juste avant l'autre bout de code.

    Puis cette partie du code:

    Citation Envoyé par JusPomme Voir le message
    Je remplace ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BufferedWriter fichier;
    			try {
    				fichier = new BufferedWriter(new FileWriter("Toto.txt"));
    				fichier.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
     
    			System.out.println("fichier créé");
    		}
    Par celui que tu m'a donné à savoir :
    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
    BufferedWriter fichier = null;
       try {
           fichier = new BufferedWriter(new FileWriter("Toto.txt"));
     
           // et là tu écris chaque valeur de table dans le fichier
           for(int index=0; index<table.length; index++) {
                 fichier.write( String.valueOf( table[index] );
                 fichier.newLine(); // pour passer à la ligne
           }
     
       } catch (IOException e) {
              e.printStackTrace();
       } finally {
          if ( fichier != null ) {
             try {
                fichier.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
       }
    }
    Est-ce que c'est ça ?
    Voilà, en insérant juste avant l'autre bout de code.

    Après, il faudra que tu mettes en place un système pour choisir quand sauvegarder et quand lire. Tu peux lire systématiquement au lancement, mais si tu sauvegardes systématiquement au lancement, ça ne sert pas à grand chose : 1 fois suffit. Et si tu sauvergardes à la fin, tu vas écraser ton fichier aussi. Il faudrait mettre en place un menu, et afficher un dialogue pour choisir le nom du fichier. Au lancement, tu peux par exemple systématiquement demander de choisir le nom du fichier.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #17
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 31
    Points : 2
    Points
    2
    Par défaut
    Oui, je pense que c'est bon maintenant. Pour le menu, j'aimerai en faire un mais je sais pas si j'aurai le temps. Il faut déjà que je trouve pour le mouseClick.
    Pour le moment, j'en suis là dans le 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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    package sudo1;
     
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
     
     
     
     
    import acm.graphics.GLabel;
    import acm.graphics.GRect;
    import acm.program.GraphicsProgram;
     
    public class sudo1 extends GraphicsProgram{
    	/**
             * 
            " */
    	private static final long serialVersionUID = 1L;
     
    	public GRect fond;
     
    	public int bord = 100;
    	public int tailleCase = 50 ;
    	public int espaceCase = 10 ;
     
    	public  GRect [][] bloc = new GRect[3][3];
    	public  GRect [][] cellule = new GRect[9][9];
    	public static int [][] valCase = new int [9][9];
    	public int [][] modifCase = new int [9][9];
     
    	public static  GLabel [][] texteCase = new GLabel[9][9];
    	void mouseDoubleClick(MouseEvent e) {
    	}
     
    	public void init() {
    		fond = new GRect(bord,bord,9*tailleCase+10*espaceCase,9*tailleCase+10*espaceCase);
    		fond.setFillColor(Color.BLUE);
    		fond.setFilled(true);
    		add(fond);
     
    		//Création des blocs 3x3 :
    		for (int indX=0; indX<3;indX++) {
    			for (int indY=0; indY<3;indY++) {
    				bloc[indX][indY]= new GRect(bord+espaceCase+indX*3*espaceCase+indX*3*tailleCase,bord+espaceCase+indY*3*espaceCase+indY*3*tailleCase, 
    						3*tailleCase+2*espaceCase,3*tailleCase+2*espaceCase);
    				bloc[indX][indY].setFillColor(Color.WHITE);
    				bloc[indX][indY].setFilled(true);
    				add(bloc[indX][indY]);
    			}
    		}
    		// création des cases :
    		for (int indX=0; indX<9;indX++) {
    			for (int indY=0; indY<9;indY++) {
    				cellule[indX][indY]= new GRect(bord+(1+indX)*espaceCase+indX*tailleCase,bord+(1+indY)*espaceCase+indY*tailleCase, tailleCase,tailleCase);
    				cellule[indX][indY].setFillColor(Color.LIGHT_GRAY);
    				cellule[indX][indY].setFilled(true);
    				add(cellule[indX][indY]);
    				valCase[indX][indY]=indX;
    				texteCase[indX][indY] = new GLabel(String.valueOf(valCase[indX][indY]),bord+(1+indX)*espaceCase+(0.4+indX)*tailleCase,
    						bord+(1+indY)*espaceCase+(0.6+indY)*tailleCase);
     
    				add(texteCase[indX][indY]);
    			}
    		}
     
    		try {
    			lecture();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		ecriture();
     
    	}
    	protected void clicSurCase(int indX, int indY) {
    		// TODO Auto-generated method stub
     
    	}
     
    int[] table=new int[81];
     
    	public static void ecriture() { 
    			String ligne ;
    			int nombre = 123;
    			int[] table=new int[81];
    			for (int indX=0; indX<9;indX++) {
    			   for (int indY=0; indY<9;indY++) {
    			        table[indX+9*indY] = valCase[indX][indY];
    			   }
    			}
    			BufferedWriter fichier = null;
    			   try {
    			       fichier = new BufferedWriter(new FileWriter("Toto.txt"));
     
    			       // et là tu écris chaque valeur de table dans le fichier
    			       for(int index=0; index<table.length; index++) {
    			             fichier.write( String.valueOf( table[index]));
    			             fichier.newLine(); // pour passer à la ligne
    			       }
     
    			   } catch (IOException e) {
    			          e.printStackTrace();
    			   } finally {
    			      if ( fichier != null ) {
    			         try {
    			            fichier.close();
    			         } catch (IOException e) {
    			             e.printStackTrace();
    			         }
    			   }
    			}
    		}
     
    	public static void lecture() throws IOException {
    		int table[] = new int[100]; // un tableau suffisamment grand pour lire une grille de 9x9 devrait faire 81 cases, mais 100 ça fonctionne
    		BufferedReader Lecteur = null;
    		try {
    			Lecteur = new BufferedReader(new FileReader("Toto.txt"));
     
                            // remplis ici ta grille
    	                String ligne;  // pas besoin d'un tableau, puisqu'on lit ligne à ligne
    		        int index = 0; // déclaration et initialisation dans la même instruction
    		       while ((ligne = Lecteur.readLine()) != null) {
    		    	   System.out.println("ligne : " + index + " > " + ligne);
    			    table[index]=Integer.parseInt(ligne);
    			    index++;
    		       }
                           /*... remplissage de la grille graphique (GLabel ou autre) ...*/
    		}
    		catch(FileNotFoundException exc) {
    			System.out.println("erreur");
    			 exc.printStackTrace(); // il est toujours intéressant de connaitre l'erreur si on veut pouvoir la traiter
    		}
    		finally {
                // s'exécute toujours
                if ( Lecteur!=null ) {
             try {
                            Lecteur.close();
                     } catch( IOException exc) {
    	           System.out.println("Fichier mal fermé");
                             exc.printStackTrace(); 
                     }
                }
          }
     
    		for (int indX=0; indX<9;indX++) {
    			for (int indY=0; indY<9;indY++) {
    				valCase[indX][indY]= table[indX+9*indY]; 
    				if ( valCase[indX][indY]==0 ) {
    				    texteCase[indX][indY].setLabel(""); // case vide
    				} else {
    				    texteCase[indX][indY].setLabel(String.valueOf(valCase[indX][indY]));
    				}
     
    			}
    		} 
     
    	}
     
     
    }
    Et encore merci pour ton aide, je file au dodo, à demain

  18. #18
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par JusPomme Voir le message
    Il faut déjà que je trouve pour le mouseClick.
    Mais tu as essayé au moins ce que je t'ai indiqué, ne serait-ce qu'en mettant un System.out.println() dans la méthode clicSurCase ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  19. #19
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2016
    Messages : 31
    Points : 2
    Points
    2
    Par défaut
    Pour l'instant je n'ais que importé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    Je n'avais pas bien compris. Ou faut-il que je mette le println ?

  20. #20
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // la ligne suivante c'est TON code
    texteCase[indX][indY] = new GLabel(String.valueOf(valCase[indX][indY]),bord+(1+indX)*espaceCase+(0.4+indX)*tailleCase,
    						bord+(1+indY)*espaceCase+(0.6+indY)*tailleCase);
    // ça c'est ce que tu ajoutes juste après
    texteCase[indX][indY].addActionListener(new ActionListener() {
     
        public void actionPerformed(ActionEvent e) {
               // clicSurCase(indX, indY); // pour l'instant met ça de côté
               System.out.println("Case cliquée !!!");
        }
     
    });
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 9
    Dernier message: 21/05/2014, 08h52
  2. Erreur code: besoin d'aide
    Par cmbelgique dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 17/11/2007, 14h09
  3. Je besoin d'aide pour terminer mon code
    Par Paulinho dans le forum C++
    Réponses: 7
    Dernier message: 06/11/2005, 23h30
  4. Débutant en C++ a besoin d'aide por son code
    Par Paulinho dans le forum C++
    Réponses: 9
    Dernier message: 08/10/2005, 08h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo