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. #41
    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
    Mon code me donne quasiment la même chose enfin si ce n'est qu'il me répète les valeurs des boucles effectuées précédemment.
    Mais sinon à la fin, tout en bas j'ai le bon tableau
    Voici ce que ça me donne dans la console:
    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
     
    |   4 3 | 7     | 9   8 | 
     
    |   4 3 | 7     | 9   8 | 
    |     5 |   3   |       | 
     
    |   4 3 | 7     | 9   8 | 
    |     5 |   3   |       | 
    |   1   |       | 3     | 
     
    |   4 3 | 7     | 9   8 | 
    |     5 |   3   |       | 
    |   1   |       | 3     | 
    | 6     |   2 7 | 2   3 | 
     
    |   4 3 | 7     | 9   8 | 
    |     5 |   3   |       | 
    |   1   |       | 3     | 
    | 6     |   2 7 | 2   3 | 
    | 4   7 |       | 1   3 | 
     
    |   4 3 | 7     | 9   8 | 
    |     5 |   3   |       | 
    |   1   |       | 3     | 
    | 6     |   2 7 | 2   3 | 
    | 4   7 |       | 1   3 | 
    |       | 5 4   |     9 | 
     
    |   4 3 | 7     | 9   8 | 
    |     5 |   3   |       | 
    |   1   |       | 3     | 
    | 6     |   2 7 | 2   3 | 
    | 4   7 |       | 1   3 | 
    |       | 5 4   |     9 | 
    |     2 |       |   3   | 
     
    |   4 3 | 7     | 9   8 | 
    |     5 |   3   |       | 
    |   1   |       | 3     | 
    | 6     |   2 7 | 2   3 | 
    | 4   7 |       | 1   3 | 
    |       | 5 4   |     9 | 
    |     2 |       |   3   | 
    |       |   5   | 4     | 
     
    |   4 3 | 7     | 9   8 | 
    |     5 |   3   |       | 
    |   1   |       | 3     | 
    | 6     |   2 7 | 2   3 | 
    | 4   7 |       | 1   3 | 
    |       | 5 4   |     9 | 
    |     2 |       |   3   | 
    |       |   5   | 4     | 
    | 5   4 |     1 | 2 6   |
    Voici mon code, il faudrait que je puisse éviter la reprise du résultat de la boucle précédente, mais je ne sais pas comment:
    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
    public static void main(String[] args) {	 
    	int[][] grille = new int[][] { 
    			{ 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 } };
     
    	StringBuilder sb = new StringBuilder();
    	for(int ki=0; ki<grille.length; ki++) {
     
    	int i = 0;
     
    	sb.append("|");
    	for (int j = 0; j < grille[i].length; j += 3) {
    		for (int kj = j; kj < j + 3; kj += 1) {
    			if (grille[ki][kj] != 0)
     
    				sb.append(grille[ki][kj]);
    			else
    				sb.append(" ");
    			sb.append(" ");
    		}
    		sb.append("| ");
    	}
    	sb.append("\n");
     
    	System.out.println(sb);
     
    }
     
     
     
    		}

  2. #42
    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 attendant de résoudre le petit soucis d'affichage, je me suis lancé au codage de la classe test, là aussi c'est une première pour moi concernant les inputStream et outputStream ainsi que les exceptions, et c'est pas de la tarte.
    Suite à quelques recherches j'ai essayé de faire le fonction chargerJeu, vue que j'avance à tatons on peut imaginer le résultat.

    Le problème c'est que je comprend pas trop comment je suis sensé extraire x, y, z à partir d'une liste dans un fichier texte
    Assez parlé voici mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    public class Test {
    	public static void main(String[] args) {
    	}
    	public void chargerJeu(){
    		FileInputStream partie12 = null;
    		try{
    		partie12 = new FileInputStream(new File("partie12.txt"));
    		byte[] buf = new byte[8];
     
     
            int n = 0;
     
     
            while ((n = partie12.read(buf)) >= 0) {
            	 for (int bit : buf) {
     
    	               System.out.print(bit);
     
    	            }
     
    	            buf = new byte[8];
     
    	         }
    	         System.out.println("Copie terminée !");
     
    	      } catch (FileNotFoundException e) {
     
    	         e.printStackTrace();
    	      } catch (IOException e) {
     
    	         e.printStackTrace();
    	      } finally {
     
    	         try {
    	            if (partie12 != null)
    	               partie12.close();
    	         } catch (IOException e) {
    	            e.printStackTrace();
    	         }
     
     
    	      }
            }

  3. #43
    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 : 55
    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
    Mon code me donne quasiment la même chose enfin si ce n'est qu'il me répète les valeurs des boucles effectuées précédemment.
    Mais sinon à la fin, tout en bas j'ai le bon tableau
    Voici ce que ça me donne dans la console:
    Si tu as plusieurs fois les mêmes lignes qui s'affichent, c'est parce que tu as mis System.out.println(sb); dans le "for ki", donc ça s'affiche à chaque ligne, une première fois avec la ligne 1, une deuxième fois avec la 1 et la 2, une troisième avec les trois première, et ainsi de suite. Pour voir ce genre d'erreur toi-même, à l'avenir, ajoute par exemple des caractères devant et derrière ce que tu affiches, et tu verras tout de suite ce qu'il se passe. Par exemple, écrit simplement System.out.println("Et voici le résultat :>" + sb + "<fin du résultat");Ce qui t'aurait donné comme résultat :
    Et voici le résultat :>|  4 3 | 7     | 9   8 | 
    <fin du résultat
    Et voici le résultat :>|  4 3 | 7     | 9   8 | 
    |    5 |   3   |       | 
    <fin du résultat
    Et voici le résultat :>|  4 3 | 7     | 9   8 | 
    |    5 |   3   |       | 
    |  1   |       | 3     | 
    <fin du résultat
    Et voici le résultat :>|  4 3 | 7     | 9   8 | 
    |    5 |   3   |       | 
    |  1   |       | 3     | 
    |6     |   2 7 | 2   3 | 
    <fin du résultat
    Et voici le résultat :>|  4 3 | 7     | 9   8 | 
    |    5 |   3   |       | 
    |  1   |       | 3     | 
    |6     |   2 7 | 2   3 | 
    |4   7 |       | 1   3 | 
    <fin du résultat
    Et voici le résultat :>|  4 3 | 7     | 9   8 | 
    |    5 |   3   |       | 
    |  1   |       | 3     | 
    |6     |   2 7 | 2   3 | 
    |4   7 |       | 1   3 | 
    |      | 5 4   |     9 | 
    <fin du résultat
    Et voici le résultat :>|  4 3 | 7     | 9   8 | 
    |    5 |   3   |       | 
    |  1   |       | 3     | 
    |6     |   2 7 | 2   3 | 
    |4   7 |       | 1   3 | 
    |      | 5 4   |     9 | 
    |    2 |       |   3   | 
    <fin du résultat
    Et voici le résultat :>|  4 3 | 7     | 9   8 | 
    |    5 |   3   |       | 
    |  1   |       | 3     | 
    |6     |   2 7 | 2   3 | 
    |4   7 |       | 1   3 | 
    |      | 5 4   |     9 | 
    |    2 |       |   3   | 
    |      |   5   | 4     | 
    <fin du résultat
    Et voici le résultat :>|  4 3 | 7     | 9   8 | 
    |    5 |   3   |       | 
    |  1   |       | 3     | 
    |6     |   2 7 | 2   3 | 
    |4   7 |       | 1   3 | 
    |      | 5 4   |     9 | 
    |    2 |       |   3   | 
    |      |   5   | 4     | 
    |5   4 |     1 | 2 6   | 
    <fin du résultat


    Il faut simplement afficher le résultat à la fin, donc après la boucle.

    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
    public static void main(String[] args) {
    		int[][] grille = new int[][] { 
    				{ 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 } };
     
    		StringBuilder sb = new StringBuilder();
    		for (int i = 0; i < grille.length; i++) {
     
    			sb.append("|");
    			for (int j = 0; j < grille[i].length; j += 3) {
    				for (int kj = j; kj < j + 3; kj += 1) {
    					if (grille[i][kj] != 0)
     
    						sb.append(grille[i][kj]);
    					else
    						sb.append(" ");
    					sb.append(" ");
    				}
    				sb.append("| ");
    			}
    			sb.append("\n");
     
    		}
     
    		System.out.println(sb);
     
    	}
    Il ne te reste plus qu'à afficher les lignes horizontales. Indice : il y en a 2, qui s'affichent pour des i qui ont une certaine valeur...

  4. #44
    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 : 55
    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
    En attendant de résoudre le petit soucis d'affichage, je me suis lancé au codage de la classe test, là aussi c'est une première pour moi concernant les inputStream et outputStream ainsi que les exceptions, et c'est pas de la tarte.
    Suite à quelques recherches j'ai essayé de faire le fonction chargerJeu, vue que j'avance à tatons on peut imaginer le résultat.

    Le problème c'est que je comprend pas trop comment je suis sensé extraire x, y, z à partir d'une liste dans un fichier texte
    Assez parlé voici mon code.
    Dans ton code, tu n'a pas besoin de récréer un buffer à chaque boucle (enlève la ligne 26). Ton buffer est ridiculement petit et ne doit pas servir à grand chose. Tu peux te simplifier la vie en utilisant un BufferedInputStream. Tu peux encore plus te simplifier la vie en utilisant un Scanner pour lire les int dans ce InputStream.

    Le format du fichier est décrit par
    3.2-Charger Jeu: cette fonction permet de charger la grille de sudoku du fichier texte, le fichier texte comporte une suite de triplet xyz séparé par des espaces:
    x: numéro de la ligne.
    y: numéro de la colonne.
    z: valeur
    Donc ton fichier sera sous cette forme, pour les 10 premiers triplets (enfin c'est ce que je comprend, de la première phrase (qui a une faute d'orthographe, soit dit en passant) :

    0 1 4 0 2 3 0 3 7 0 6 9 0 8 8 1 2 5 1 4 3 2 1 1 2 6 3 3 0 6 3 4 2 
    
    D'ailleurs, il te serait bien plus simple par commencer à faire la fonction de sauvegarde, puis celle de chargement, puisqu'en faisant la sauvegarde avant le chargement, tu aurais un fichier qui te permettrait de réfléchir à comment le charger, et aussi pour tester le chargement.

  5. #45
    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 ne sais comment te remercier pour toute cette aide, je me lance de suite dans la correction de la méthode imprimer grille et ensuite je m'occupe de chargerJeu, je vais en profiter pour aller voir comment appliquer le BufferedInputStream. J'ai relu la consigne et en effet ils ne me demandent pas de l'afficher dans un tableau, ouf, enfin à mon avis ce n'est que partie remise, un jour ou l'autre j'aurais ça aussi à faire.

    Ps: C'est vrai qu'ils ont oublié un "s" à la consigne, j'espère que leurs fautes se cantonnerons seulement à l’orthographe.

  6. #46
    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
    Voici la classe Grille complète, du moins je l’espère.
    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
     
    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 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;
     
    	}
     
    	public void imprimerGrille() {
     
    		StringBuilder sb = new StringBuilder();
    		System.out.println("------------------------\n");
    		for (int i = 0; i < tab1.length; i++) {
    			if (i == 3) {
    				sb.append("------------------------\n");
    			}
    			if (i == 6) {
    				sb.append("------------------------\n");
    			}
     
    			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);
    		System.out.println("------------------------\n");
     
    	}
     
    }

  7. #47
    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 : 55
    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
    Complète, complète, il manque plein de méthodes, dont grilleToArrayList (qeustion 2.3) que tu as déjà fait normalement.

    Dans afficheGrille, les System.out.println() sont en trop : même s'il fallait que tu ajoutes une ligne en haut et en bas, il faudrait utiliser le StringBuilder et pas le mélanger avec tu System.out (soit on affiche tout avec System.out, soit on passe tout par un StringBuilder).

    Tu aurais pu écrire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (i == 3) {
         sb.append("------------------------\n");
    }
    if (i == 6) {
    	sb.append("------------------------\n");
    }
    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (i == 3 || i == 6 ) {
    				sb.append("------------------------\n");
    			}
    Sinon, il serait préférable d'avoir un private static final String avec la ligne horizontale.

  8. #48
    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
    Alors voici la grille avec ce que tu m'as demandé de faire, moi qui pensait que c’était quasiment terminé pour cette classe.
    Par contre concernant le grilleToArrayList c'est pas ce qui est au début dans la fonction public Grille(ArrayList<Integer> al) { ?
    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
     
    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 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);
     
    	}
     
    }

  9. #49
    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 : 55
    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
    Par contre concernant le grilleToArrayList c'est pas ce qui est au début dans la fonction public Grille(ArrayList<Integer> al) { ?
    Grille(ArrayList<Integer> al) n'est pas une fonction, mais un constructeur : il est censé prendre une liste qui contient des nombres en entrées et les mettre dans un tableau : c'est ce qu'on te demande de faire en question 2.2

    grilleToArrayList(ArrayList al), c'est une méthode qui prend une ArrayList en entrée et qui y met les valeurs du tableau. c'est ce qu'on te demande de faire en 2.3

    Pfiouh...t'est pas sorti de l'auberge si tu ne vois pas la différence...

  10. #50
    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
    ok, oui pardon je dis n'importe quoi. C'est que je pensais l'avoir déjà fait.

  11. #51
    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 faisant comme ça je sauvegarde bien le tableau dans un arraylist?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void grilleToArray(ArrayList al){
    	  al = new ArrayList(Arrays.asList(tab1));
     }

  12. #52
    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 : 55
    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 a déjà parlé de ça lundi (voir, entre autres, post 5).

    Là, avec ce code, tu obtiens une liste de tableau, pas une liste de int, parce que tab1 est un tableau à DEUX dimensions ! Arrays.asList() prend un tableau à une dimension et le transforme en List. Un tableau de int à 2 dimensions, est un tableau à une dimension de tableau de int.

    De plus, le béaba : al = new ArrayList(...) ça modifie la variable locale al dans la méthode pour la faire pointer sur une nouvelle instance. Mais l'appelant qui veut récupérer les valeurs dans la liste qu'il a passé en paramètre n'aura rien récupéré du tout, parce que la liste passé en paramètre n'aura pas été changée.

    C'est exactement comme dans ce 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
    public class Demo {
     
        public static void main(String[] args) {
     
                int a = 25;
     
                method(a);
     
                System.out.println(a);
     
     
        }
     
        private static void method(int a) {
     
                a = 42;
     
        }
     
    }
    ça affiche 25, et pas 42.

  13. #53
    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
    Ok j'ai vu, désoler de t'avoir fait répéter les mêmes choses une nouvelle fois, mais là je commence un peu à saturer.

  14. #54
    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
    Voilà ce que j'ai essayer de faire à partir du post 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void grilleToArray(ArrayList<Integer>al){	 
     
    	 for (int nblig = 0; nblig < tab1.length; nblig++) {
    		 for (int nbcol = 0; nbcol < tab1.length; nbcol++) { 
     
    			 al.add(tab1 [nblig][nbcol]);;
     
    		 }}
     }

  15. #55
    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 me suis encore trompé. je vais le refaire.

  16. #56
    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 : 55
    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 me suis encore trompé. je vais le refaire.
    C'était vraiment pas loin ce coup-ci ! Il y'a juste une petit problème dans la seconde boucle (sur nbcol)

  17. #57
    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 ouf, pour la seconde boucle, est-ce a cause du fait que j'ai mit pour colonne de 0 à taille tableau exclue, alors que j'aurais du mettre pour colonne de 0 à taille de ligne exclue?

  18. #58
    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 : 55
    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
    Bon ouf, pour la seconde boucle, est-ce a cause du fait que j'ai mit pour colonne de 0 à taille tableau exclue, alors que j'aurais du mettre pour colonne de 0 à taille de ligne exclue?
    On n'écrit pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    or (int nbcol = 0; nbcol < tab1.length; nbcol++)
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    or (int nbcol = 0; nbcol < tab1[nblig].length; nbcol++)
    Là, dans ton cas, ça fonctionne, parce que le tableau est carré, donc, le nombre de lignes est égal au nombre de colonnes.

  19. #59
    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 me disait bien que ça venait de là mais je ne savais pas trop comment pallier au problème, merci.
    Je vais faire les modifications et je t'envoi le code, car là je suis sur un autre ordi qui n'a pas eclipse.

  20. #60
    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
    Voilà la classe avec cette correction en plus, normalement elle devrait être quasiment terminé.
    Il me restera à mettre les commentaires mais ça je le ferai à la fin de tout.
    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);
     
    	}
     
    }

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/07/2014, 15h41
  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, 02h15
  3. [Lazarus] Lecture et écriture de fichier Excel
    Par Vazily dans le forum Lazarus
    Réponses: 3
    Dernier message: 19/04/2008, 17h10
  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, 15h06
  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, 16h30

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