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

Entrée/Sortie Java Discussion :

Lecture et écriture de fichier de sauvegarde pour un jeu.


Sujet :

Entrée/Sortie Java

  1. #81
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    Ah d'accord, bon je vais modifier tout ça.

  2. #82
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    Pour être sur quand on importe un méthode on fait bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Grille grille = new Grille();
    		grille.estSurLigne(valeur, ligne);

  3. #83
    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 while.dede Voir le message
    Pour être sur quand on importe un méthode on fait bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Grille grille = new Grille();
    		grille.estSurLigne(valeur, ligne);
    Tu veux dire "quand on appelle une méthode" ? La première ligne : déclaration d'une variable de type Grille et initialisation avec une nouvelle instance de Grille. Seconde ligne, appel (ou invocation) d'une méthode de la classe Grille sur l'instance pointée par grille, avec les variables valeur et ligne en paramètres.
    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.

  4. #84
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    Heu oui appel de méthode, merci.

  5. #85
    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 while.dede Voir le message
    Je peux laisser le tableau juste pour la limite de caractères?
    Je ne comprends ce que tu veux dire : quelle limite de caractères ?

    Citation Envoyé par while.dede Voir le message
    Pour être fixé est ce que ce bout de code est bon,
    Si l'utilisateur entre 8 et 5 par exemple la méthode devrait fonctionner, non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Grille grille = new Grille();
     
    			System.out.print(" Veuillez choisir une valeur et une ligne:");			
    				grille.estSurLigne(_valeur, _ligne);
    Bah, là, qu'est-ce que tu veux que je te dise sur 3 lignes de code qui se baladent ? Mais à priori, je m'attenderais au moins à ce que les 2 variables soient lues au clavier entre le message "Veuillez choisir une valeur et une ligne" (d'ailleurs, ce serait probablement plus simple, de le faire en 2 fois : on demande la ligne, puis la valeur), et l'utilisation des variables.

    Ensuite, on devrait au moins récupérer le résultat de la méthode pour le tester, à priori.

    Maintenant à dire si elle fonctionne avec 8 et 5 : le plus simple est encore de tester. Normalement, on a finalisé cette méthode dans je ne sais plus quel post la méthode, et elle était censé fonctionner à ce moment.

    Et puis, je m'étonne de voir le new Grille() juste avant les 2 autres lignes : tu créés bien qu'une seule instance de Grille qui est utilisée tout au court d'une même partie, n'est-ce-pas ?
    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.

  6. #86
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    En fait j'avais mal formulé ma question.
    Oublie les deux messages précédents je m'embrouille tout seul.

    Ce que j'ai du mal à comprendre c'est comment faire pour affecter les différentes valeur de la classe Grille dans la classe test.
    Si je met Grille grille = new Grille(); au début de ma classe, et qu' ensuite dans mon code je demande à l'utilisateur de taper le numéro de la ligne.
    Après avec le scanner j'enregistre ce numéro comme _ligne et finalement je veux vérifier avec la méthode concerné si une valeur existe sur la ligne en question.
    Je n'ai qu'a mettre grille.estSurLigne(_valeur, _ligne); ce _ligne correspond bien à celui scanné précédemment?

  7. #87
    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 while.dede Voir le message
    Je ne sais pas trop comment faire pour avoir ce type de résultat:
    Votre choix: 2
    Veuillez choisir une ligne: 2
    Veuillez choisir une colonne: 6
    Veuillez choisir une valeur:7
    Erreur, la grille comporte déjà la valeur 7 dans le bloc représentant la case (2,6).

    je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Grille grille = new Grille();
     
    			System.out.print(" Veuillez choisir une valeur et une ligne:");			
    				grille.estSurLigne(_valeur, _ligne);
    Mais en faisant comme ça la fonction va vérifier tout de suite si la valeur est présente alors que moi j'aimerais enregistrer le numéro de la ligne, de la colonne et ensuite de la valeur, étape par étape.


    Pourtant, c'est exactement pareil que pour lire les int dans le fichier : avec Scanner et nextInt(), sauf que là, le scanner, il est créé à partie de l'entrée standard : Scanner clavier = new Scanner(System.int).

    là c'est le "code" que tu m'as présenté ce matin : c'est l'idée, sauf que là tu ligne une chaîne de caractères que tu compares à un int, ce qui une absurdité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    System.out.print(" Entrez votre choix : ");
    			afficheur2 = sudoku.nextLine();
    			if (afficheur2 == 2) {
    Donc, tu affiches une question (la ligne), tu lis la réponse (dans une variable), tu affiches la question suivante (la colonne), tu lis la réponse (dans une autre variable), etc...
    Quand tout est saisi, tu dois vérfier que la valeur jouée n'est pas déjà dans la ligne ou la colonne (règle du sudoku) - ce qui revient à appeler la méthode estSurLaLigne, puis estSurLaColonne, et si c'est le cas, tu affiches "erreur..." et tu reposes la question (boucle).

    C'est du hypra basique : si tu ne peux même pas écrire ça tout seul, je ne sais pas pourquoi tu persistes à chercher à valider je ne sais quoi comme formation. Elle n'est de toute manière pas validée dans les faits. Je pense qu'il faut te résigner. Surtout si tu dois le rendre ce soir...
    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.

  8. #88
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    Non c'est bon en fait c'est ce que j'avais compris juste je voulais en être sur.

  9. #89
    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 while.dede Voir le message
    Non c'est bon en fait c'est ce que j'avais compris juste je voulais en être sur.
    Et tu ne peux pas simplement tester : ça va plus vite de tester, que de passer par le forum (on est plus dans les années 90 où il y avait des quota de temps de compilation - enfin, je dis ça, il y a peut-être encore des écoles qu'il le pratique, mais là, toi, tu es chez toi) .
    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.

  10. #90
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    Tu as raison j'aurais du tester au lieu de te déranger pour une question comme ça, excuse-moi.
    J'ai donc procédé aux modifications sur la classe test.
    Je comprend pas pourquoi eclipse me dit qu'il ne peut pas convertir un int en string pour _ligne = sudoku.nextLine(); .

    voici 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
     
    	public void jouerSudoku() {
     
     
    		int[][] tab2 = new int[9][9];
     
     
    		int condition_ligne = 0;
     
    		while (condition_ligne == 0) {
    			System.out.print(" Veuillez choisir une ligne:");
     
    			_ligne = sudoku.nextLine();
     
    			if (Integer.parseInt(_ligne) > tab2.length) {
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_ligne = 0;
    			}
     
    			else if (Integer.parseInt(_ligne) < tab2.length)
     
    			{
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_ligne = 0;
    			}
     
    			else {
     
    				condition_ligne = 1;
     
     
    			}
     
    		}
     
    		int condition_colonne = 0;
     
    		while (condition_colonne == 0) {
     
    			System.out.print(" Veuillez choisir une colonne:");
     
    			_colonne = sudoku.nextLine();
     
    			if (Integer.parseInt(_colonne) > tab2.length) {
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_colonne = 0;
    			}
     
    			else if (Integer.parseInt(_colonne) < tab2.length)
     
    			{
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_colonne = 0;
    			}
     
    			else {
     
    				condition_colonne = 1;
     
    			}
    		}
    		int condition_valeur = 0;
     
    		while (condition_valeur == 0) {
     
    			System.out.print(" Veuillez choisir une valeur:");
     
    			_valeur = sudoku.nextLine();
     
    			if (Integer.parseInt(_valeur) > tab2.length) {
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_valeur = 0;
     
    			}
     
    			else if (Integer.parseInt(_valeur) < tab2.length)
     
    			{
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_valeur = 0;
    			}
     
    			else {
     
    				condition_valeur = 1;
     
    			}
     
     
    		}
    		grille.estSurLigne(_valeur, _ligne);
    		grille.estSurColonne(_valeur, _colonne);
    		grille.estDansLeBloc(_valeur,_ligne,_colonne);
     
    	}
     
    }

  11. #91
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    Bon suite à de nombreuses corrections vu le nombre de fautes que j'avais laissé, pas étonnant que je n'y comprenait rien.
    Il ne me reste qu'une erreur, que je ne comprend pas.
    Eclipse me souligne : Grille grille = new Grille();
    et il me dit: The constructor Grille() is undefined

    Pourquoi?

  12. #92
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 5
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Je me permet de m'incruster rapidement dans cette discussion qui me rappel beaucoup certaines formations que j'ai pu donner .

    En fait tu a défini la classe Grille avec un constructeur avec une liste d'entiers a1, donc il faut passer a1 dans le new Grille(...). Maintenant, la difficulté est de savoir à quoi correspond a1

    Bonne soirée.

  13. #93
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    Bonjour, donc il me suffit de faire Grille grille = new Grille(al).
    Merci.

  14. #94
    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 while.dede Voir le message
    Bonjour, donc il me suffit de faire Grille grille = new Grille(al).
    Merci.
    Oui. Ce n'est pas clairement indiqué dans le sujet, mais je pense qu'il faut que la méthode de chargement ne charge pas les données dans un tableau mais dans une ArrayList. Ensuite, tu pourras initialiser la grille avec cette ArrayList.

    Du coup, le format du fichier n'est pas très pratique pour charger une ArrayList. Il est plutôt adapté au chargement dans un tableau (vu qu'on a un triplet avec des coordonnées (d'ailleurs il est plutôt adapté à la sauvegarde d'un tableau). On a pourtant une méthode qui permet de charger dans une ArrayList une méthode pour affecter un tableau dans l'arraylist (question 2.3). Mais elle est dans Grille, alors que chargerJeu est dans Test. Il y a manque manifeste de logique dans le sujet : on des fonctions de sauvegarde/chargement orienté tableau, et des méthodes d'initialisation/sauvegarde de Grille orientées ArrayList !

    Une solution pour s'en sortir serait de duppliquer les méthodes dans Grille, ce qui n'est pas pour moi une solution. L'autre solution serait de mettre les méthodes de sauvegarde et chargement fichier dans Grille, et de lui ajouter un constructeur avec le nom du fichier en paramètre, ce qui permettrait de créer une Grille à partir d'un fichier.

    Une autre solution est d'ajouter un constructeur sans argument à Grille, et d'utiliser sa méthode setTableau(int[][]) (question 1.2) pour charger (et int[][] getTableau() pour sauvegarder). Ce qui rend complètement inutile les méthodes faites au 2.1 et 2.2.

    Par contre je m'apperçois en relisant le sujet, qu'on s'est un peu trompé dans l'interprétation des questions 3.2 et 3.3 : les valeurs des triplets x y et z ne sont pas séparées par des espaces, mais seulement les triplets. Ça ne change pas grand chose pour la méthode de sauvegarde :

    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
    public void savePartie(int[][] tab1, String cheminDuFichier)
    			throws IOException {
     
    		try (BufferedWriter writer = new BufferedWriter(new FileWriter(
    				new File(cheminDuFichier)))) {
     
    			// ici tu fais une double boucle sur le tableau et tu l'écris
    			for (int i = 0; i < tab1.length; i++) {
    				for (int j = 0; j < tab1[i].length; j++) {
    					if (tab1[i][j] != 0) {
    						writer.write(String.valueOf(i));
    						writer.write(String.valueOf(j));
    						writer.write(String.valueOf(tab1[i][j]));
    						writer.write(" ");
    					}
    				}
     
    			}
    		}
     
    	}
    Par contre ça change pas mal le chargement. Soit on charge les valeurs en int :

    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
    public void chargerJeu(String cheminDuFicher) throws IOException {
     
    		int[][] tab1 = new int[9][9];
     
    		try (Scanner scanner = new Scanner(new File(cheminDuFicher))) {
    			while (scanner.hasNextInt()) {
    				int triplet = scanner.nextInt(); // chargement d'un triple xyz
                                    int x = triplet/100; // x est le chiffre des centaines
    				int y = (triplet-x*100)/10; // y est le chiffre des dizaines
    				int z = triplet%10; // z est le chiffre de l'unité
    				tab1[x][y] = z;
     
    			}
     
    			return tab1;
     
    		}
    	}
    Ce qui n'est pas terrible comme solution (pleins de calculs)

    Soit on charge en String (mieux à mon avis) :

    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
    public void chargerJeu(String cheminDuFicher) throws IOException {
     
    		int[][] tab1 = new int[9][9];
     
    		try (Scanner scanner = new Scanner(new File(cheminDuFicher))) {
    			while (scanner.hasNext()) {
    			        String triplet = scanner.next(); // chargement d'un triple xyz
                                    int x = Integer.parseInt(triplet.substring(0,1); // x est le chiffre des centaines
    				int y = Integer.parseInt(triplet.substring(1,2); // y est le chiffre des dizaines
    				int z = Integer.parseInt(triplet.substring(2,3); // z est le chiffre de l'unité
    				tab1[x][y] = z;
     
    			}
     
    			return tab1;
     
    		}
    	}
    Ça ne change rien à notre problème de chargement/sauvegarde tableau versus ArrayList.
    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. #95
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    je sais pas pourquoi j'ai eu un bug de windows, je suis en train de faire une restauration système, heureusement j'ai tout sauvegardé sur mon HD externe.
    Mis à part ça, je vais corriger l'histoire de l'espace tout les trois triplets, j'avais pas du tout remarqué.
    J'ai fait quelques recherches et apparemment il y a plusieurs étudiants qui se sont pleints à propos de ce cours, ce n'est pas la première fois ou je me retrouve avec une consigne mal formulée ou illogique.
    Selon la consigne je dois faire un certain nombre de méthodes dans la classe Grille, ça c'est fait, mais je pense avoir le droit de rajouter d'autres éléments dans la classe Test.
    Puisque dans la consigne de la classe Test on me dit : Autres fonctions que vous jugez pertinentes.
    Donc la seule classe ou je peux rajouter des choses est la classe Test.
    Après si ça se trouve on me demande simplement de faire bêtement ce qu'il y a d’écrit et tant pis si le programme ne compile pas, perso je trouverais cela vraiment débile, mais ça m'est déjà arrivé

  16. #96
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    J'ai une autre erreur il s’agit de l'appel de la méthode jeuSudoku.
    Voici l'erreur : cheminDuFicher cannot be resolved to a variable
    et voici 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
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
     
    public class Test{
    	protected int _ligne;
    	protected int _colonne;
    	protected int _valeur;
    	static Scanner sudoku = new Scanner(System.in);
    	//Case bloc = new Case();
    	Grille grille = new Grille(al);
     
     
     
    	public void main(String[] args) {
     
    		int Sudoku = 0;
    		int choix = 0;
            int afficheur1 = 0;
     
    		int afficheur2 = 0;
     
    		int afficheur3 = 0;
     
    		System.out
    				.println("*************************************Sudoku*********************************** ");
    		System.out
    				.println("Bienvenue dans le programme de Sudoku, ce programme ...");
    		System.out.println(" ");
    		System.out.println("Veuillez choisir un des choix suivants:");
    		System.out.println("1. Charger jeu.");
    		System.out.println("2. Jouer Sudoku.");
    		System.out.println("3. Quitter.");
     
    		afficheur1 = sudoku.nextInt();
    		int charger_jeu = 0;
     
    		while (charger_jeu == 0) {
     
     
    			if (afficheur1 == 1) {
     
    				charger_jeu = 1;
    				choix = 1;
    			} else {
    				charger_jeu = 0;
    			}
    		}
     
    		int jouer_sudoku = 0;
    		while (jouer_sudoku == 0) {
     
     
    			if (afficheur2 == 2) {
     
    				jouer_sudoku = 1;
    				choix = 2;
    			} else {
    				jouer_sudoku = 0;
    			}
    		}
     
    		int quitter = 0;
    		while (quitter == 0) {
     
     
    			if (afficheur3 == 3) {
     
    				quitter = 1;
    				choix = 3;
    			} else {
    				quitter = 0;
    			}
    		}
     
    		if (choix == 1) {
    			// Methode chargerJeu
             chargerJeu(cheminDuFicher);
    		}
    		if (choix == 2) {
    			// jouerSudoku
    			jouerSudoku();
    		}
    		if (choix == 3) {
     
     
    			System.exit(0);
    		}
    	}
     
    	public static void chargerJeu(String cheminDuFicher) throws IOException {
     
    		int[][] tab1 = new int[9][9];
     
    		try (Scanner scanner = new Scanner(new File(cheminDuFicher))) {
    			while (scanner.hasNext()) {
    			        String triplet = scanner.next(); // chargement d'un triple xyz
                                    int x = Integer.parseInt(triplet.substring(0,1); // x est le chiffre des centaines
    				int y = Integer.parseInt(triplet.substring(1,2); // y est le chiffre des dizaines
    				int z = Integer.parseInt(triplet.substring(2,3); // z est le chiffre de l'unité
    				tab1[x][y] = z;
     
    			}
     
    			System.out.println( tab1);
     
    		}
    	}
     
    	public void savePartie(int[][] tab1, String cheminDuFichier)
    			throws IOException {
     
    		try (BufferedWriter writer = new BufferedWriter(new FileWriter(
    				new File(cheminDuFichier)))) {
     
    			// ici tu fais une double boucle sur le tableau et tu l'écris
    			for (int i = 0; i < tab1.length; i++) {
    				for (int j = 0; j < tab1[i].length; j++) {
    					if (tab1[i][j] != 0) {
    						writer.write(String.valueOf(i));
    						writer.write(String.valueOf(j));
    						writer.write(String.valueOf(tab1[i][j]));
    						writer.write(" ");
    					}
    				}
     
    			}
    		}
     
    	}
     
     
    	public void jouerSudoku() {
     
     
    		int[][] tab2 = new int[9][9];
     
     
    		int condition_ligne = 0;
     
    		while (condition_ligne == 0) {
    			System.out.print(" Veuillez choisir une ligne:");
     
    			_ligne = sudoku.nextInt();
     
    			if (_ligne > tab2.length) {
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_ligne = 0;
    			}
     
    			else if (_ligne < tab2.length)
     
    			{
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_ligne = 0;
    			}
     
    			else {
     
    				condition_ligne = 1;
     
     
    			}
     
    		}
     
    		int condition_colonne = 0;
     
    		while (condition_colonne == 0) {
     
    			System.out.print(" Veuillez choisir une colonne:");
     
    			_colonne = sudoku.nextInt();
     
    			if (_colonne > tab2.length) {
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_colonne = 0;
    			}
     
    			else if (_colonne < tab2.length)
     
    			{
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_colonne = 0;
    			}
     
    			else {
     
    				condition_colonne = 1;
     
    			}
    		}
    		int condition_valeur = 0;
     
    		while (condition_valeur == 0) {
     
    			System.out.print(" Veuillez choisir une valeur:");
     
    			_valeur = sudoku.nextInt();
     
    			if (_valeur > tab2.length) {
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_valeur = 0;
     
    			}
     
    			else if (_valeur < tab2.length)
     
    			{
     
    				System.out
    						.println("Vous devez inserez un nombre compris entre 1 et 9");
     
    				condition_valeur = 0;
    			}
     
    			else {
     
    				condition_valeur = 1;
     
    			}
     
     
    		}
    		grille.estSurLigne(_valeur, _ligne);
    		grille.estSurColonne(_valeur, _colonne);
    		grille.estDansLeBloc(_valeur,_ligne,_colonne);
     
    	}
     
    }

  17. #97
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    Je pense que la meilleur solution parmit celles que tu as énnoncé plus haut pour que le programme fonctionne serait celle-ci:
    L'autre solution serait de mettre les méthodes de sauvegarde et chargement fichier dans Grille, et de lui ajouter un constructeur avec le nom du fichier en paramètre, ce qui permettrait de créer une Grille à partir d'un fichier.

  18. #98
    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 while.dede Voir le message
    J'ai une autre erreur il s’agit de l'appel de la méthode jeuSudoku.
    Voici l'erreur : cheminDuFicher cannot be resolved to a variable
    Bah, oui, en ligne 75, la variable cheminDuFichier na pas été déclarée : elle n'existe donc pas.
    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. #99
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 217
    Points : 218
    Points
    218
    Par défaut
    Il faudrait donc que je déclare la variable cheminDuFichier avant l'appel de méthode.
    C'est bon pour ce problème c'est résolut.
    J'ai remarqué un autre problème toujours d'initialisation de variable dans la classe test à la ligne 36 pour liste.
    Par contre quand j'initialise la variable il me dit qu'elle est dupliqué avec celle de ArrayList<Integer> liste;
    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
     
    import java.util.*;
     
    public class Grille {
    	int[][] tab1 = { { 0, 4, 3,  7, 0, 0,  9, 0, 8 },
                         { 0, 0, 5,  0, 3, 0,  0, 0, 0 }, 
                         { 0, 1, 0,  0, 0, 0,  3, 0, 0 },
     
                         { 6, 0, 0,  0, 2, 7,  2, 0, 3 }, 
                         { 4, 0, 7,  0, 0, 0,  1, 0, 3 },
                         { 0, 0, 0,  5, 4, 0,  0, 0, 9 },
     
                         { 0, 0, 2,  0, 0, 0,  0, 3, 0 },
                         { 0, 0, 0,  0, 5, 0,  4, 0, 0 }, 
                         { 5, 0, 4,  0, 0, 1,  2, 6, 0 } };
     
    	public Grille(ArrayList<Integer> al) {
     
    		int nbcol = 9;
    		int nblig = 9;
     
    		ArrayList<Integer> liste;
     
    		if (liste.size() != nbcol * nblig) {
    			System.out
    					.println("erreur : pas assez ou trop de données dans la liste");
    		}
     
    		int ligne = 0;
    		int colonne = 0;
     
    		for (Integer e : al) {
     
    			tab1[ligne][colonne] = e;
    			colonne++;
    			if (colonne >= nbcol) {
    				colonne = 0;
    				ligne++;
    			}
     
    		}
    	}
     
     public void grilleToArray(ArrayList<Integer>al){	 
     
    	 for (int nblig = 0; nblig < tab1.length; nblig++) {
    		 for (int nbcol = 0; nbcol < tab1[nblig].length; nbcol++) { 
     
    			 al.add(tab1 [nblig][nbcol]);;
     
    		 }}
     }
     
    	public boolean estSurLigne(int _valeur, int _ligne) {
     
    		for (int i = 0; i < 9; i++)
    			if (tab1[_ligne][i] == _valeur) {
    				System.out
    						.println("cette valeur est déjà présente sur cette ligne");
    				return true;
    			}
    		return false;
     
    	}
     
    	public boolean estSurColonne(int _valeur, int _colonne) {
     
    		for (int j = 0; j < 9; j++)
    			if (tab1[_colonne][j] == _valeur) {
    				System.out
    						.println("cette valeur est déjà présente sur cette colonne");
    				return true;
    			}
    		return false;
     
    	}
     
    	public boolean estDansLeBloc(int _value, int _ligne, int _colonne) {
    		return tab1[_ligne][_colonne] == _value;
     
    	}
    	private static final String tiret = "------------------------\n";
    	public void imprimerGrille() {
     
    		StringBuilder sb = new StringBuilder();
     
    		sb.append(tiret);
    		for (int i = 0; i < tab1.length; i++) {
    			if (i == 3 || i == 6 ) {
    				sb.append(tiret);
    			}
     
    			sb.append("|");
     
    			for (int j = 0; j < tab1[i].length; j += 3) {
    				for (int kj = j; kj < j + 3; kj += 1) {
    					if (tab1[i][kj] != 0)
     
    						sb.append(tab1[i][kj]);
    					else
    						sb.append(" ");
    					sb.append(" ");
    				}
    				sb.append("| ");
    			}
    			sb.append("\n");
     
    		}
     
    		System.out.println(sb);
    		sb.append(tiret);
     
    	}
     
    }

  20. #100
    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 while.dede Voir le message
    Il faudrait donc que je déclare la variable cheminDuFichier avant l'appel de méthode.
    Je ne sais plus ce que tu dis le sujet, et j'ai la flemme d'aller voir. Selon ce que dit le sujet :

    • Faire une constante dans la classe Test, avec le nom du ficheir public static final String FILE_NAME = "trucbidule.txt"; ;
    • afficher une message du type "Veuillez entre le nom du fichier : ", déclarer une variable, et lire sa valeur au clavier puis appeler la méthode.
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/07/2014, 14h41
  2. [Dvp.NET|Intégré] Lecture et écriture de fichiers INI
    Par tomlev dans le forum Contribuez
    Réponses: 12
    Dernier message: 23/01/2009, 01h15
  3. [Lazarus] Lecture et écriture de fichier Excel
    Par Vazily dans le forum Lazarus
    Réponses: 3
    Dernier message: 19/04/2008, 16h10
  4. [VB6] lecture et écriture de fichier
    Par robert_trudel dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 12/06/2006, 14h06
  5. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30

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