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

Langage Java Discussion :

Problème avec les tableaux


Sujet :

Langage Java

  1. #1
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut Problème avec les tableaux
    Bonsoir,

    Je suis un peu perdu, on demande : 1. Créez une classe Simulateur comprenant le tableau t d'entiers ainsi qu'un objet de la classe De. Un constructeur sans paramètre sera chargé d'initialiser toutes les cases à 0.

    Je suis à la partie 2 première question du pdf, et je n'arrive pas à afficher le contenu de mon tableau (j'aimerai qu'il y ait des 0 espacés avec tabulation et retour à la ligne)

    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 class Simulateur extends De {
    	private int joueur;
    	private int nbLancer;
    	private int[][] t;
     
     
    	public Simulateur(int joueur, int nbLancer) {
    		this.joueur = joueur;
    		this.nbLancer = nbLancer;
    		for (int lig = 0; lig <= joueur; lig++) {
    			System.out.println(t[lig] + "\n");
    			for (int col = 0; col <= nbLancer; col++) {
    				System.out.println(t[col]+"\t");
    				t[lig][col] = 0;
    			}
    		}
    	}
     
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class testSimu {
    	private static void main(String[] args) {
    	Simulateur s1 = new Simulateur(10,20);
     
    	System.out.println(s1);
     
    	}
    }

    Merci beaucoup!




    Atelier_Jeu_de_Des.pdf

  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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Déclarer une variable tableau par int[][] t ne suffit pas pour avoir une instance de tableau. Il faut faire t=new int[nombre de lignes][nombre de colonnes] pour que le tableau existe et que tu puisses le traiter (le remplir, l'afficher, etc...).

    Ensuite, on te demande de créer une classe Simulateur, avec une variable tableau de int et une variable De, avec un constructeur qui initialise toutes les cases à zéro. On précise que le tableau doit permettre de stocker 20 lancés de dé, pour 10 joueurs, le schéma montrant que les lancés sont en colonnes et les joueurs sont en lignes.

    Donc tu dois avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Simulateur {
     
       private De de; // une variable de classe De
       private int[][] tableau; // un tableau de int à 2 dimensions
     
       public Simulateur() { // un constructeur sans paramètre
            de = new De(); // on créé une instance de classe De et on la met dans la variable de
            tableau = new int[10][20]; // on créé une instance de tableau de 10 lignes de 20 colonnes
            // ...
       }
     
    }
    Tu dois ajouter explicitement le remplissage du tableau de 0 (une double boucle imbriquée par exemple), bien que cela ne soit pas indispensable (en Java, un tableau de int nouvellement créé est forcément rempli de 0).

    Note que tu pourrais également faire (mais la première méthode me semble mieux en prévision de la question 7) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Simulateur {
     
       private De de = new De(); // une variable de classe De
       private int[][] tableau = new int[10][20]; // un tableau de int à 2 dimensions
     
       public Simulateur() { // un constructeur sans paramètre
            // ...
       }
     
    }
    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
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Merci beaucoup pour ton aide joel.drigo

  4. #4
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Rebonjour,

    J'ai actuellement un autre problème pour la question 7.(Si ce n'est déjà fait, comment modifier la classe Simulateur pour qu'il soit possible de choisir le nombre de joueurs et de lancers lors de l'instanciation (création) d'un Simulateur ?)

    Voici mon code actuel sans les changements :
    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
    public class Simulateur extends De {
    	private De de;
    	private int[][] tableau;
     
    	public Simulateur() {
    		tableau = new int[11][20];
    		de = new De(1, 6);
    		for (int lig = 0; lig <= 10; lig++) {
    			for (int col = 0; col <= 19; col++) {
    				tableau[lig][col] = 0;
    			}
    		}
    	}
     
    	public void remplir() { // Permet de remplir le tableau
    		for (int lig = 1; lig <= 10; lig++) {
    			for (int col = 0; col <= 19; col++) {
    				tableau[lig][col] = de.Lancer();
    			}
    		}
    	}
     
    	public void afficheLancersJoueur(int numJoueur) { // Permet d'afficher les lancers du joueur dans un tableau
    		String result = "Joueur n°" + numJoueur + " ->";
    		System.out.print(result);
    		for (int col = 0; col <= 19; col++) {
    			System.out.print("\t" + tableau[numJoueur][col]);
     
    		}
    	}
     
    	public void totalJoueur(int numJoueur) { // Calcul le total du joueur, et donne le nombre de 6 obtenu
    		int totalNbJoueur = 0;
    		int totalSix = 0;
    		for (int col = 0; col <= 19; col++) {
    			totalNbJoueur += tableau[numJoueur][col];
    			if (tableau[numJoueur][col] == 6) {
    				totalSix++;
    			}
    		}
    		System.out.println("\n" + "Total du Joueur n°" + numJoueur + " -> "
    				+ totalNbJoueur + " (dont " + totalSix + " six)");
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class testSimu {
    	public static void main(String[] args) {
     
    		Simulateur s1 = new Simulateur();
    		s1.remplir();
    		s1.afficheLancersJoueur(4);
    		s1.totalJoueur(4);
    		/*for (int i = 1; i < 11; i++) {
    			s1.afficheLancersJoueur(i);
    			System.out.println("\n");
    		}*/
    	}
    }
    J'ai pensé à créer deux propriétés "int nbJoueurs et int nbLancer" et les mettre en paramètre dans le constructeurs, mais après je ne sais pas quelles lignes remplacer pour que cela fonctionne.. (par exemple dans les for il faut remplacer "col" par "nbLancer" et "lig" par "nbJoueur" mais ça me donne une erreur du style : "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11"

    Je suis débutant en java!

  5. #5
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Regardes ton constructeurs sans paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public Simulateur() {
       tableau = new int[11][20];
    ...
    donc le 11 c'est le nombre de joueurs et le 20 c'est le nombre de tirage : pour qu'ils soient paramétrable, il suffit d'ajouter un nouveau constructeur qui fait exactement la même chose, mais avec 2 paramètres, un pour le nombre de joueurs, un pour le nombre de tirage est d'utiliser ces nombres :

    Tu peux même remplacer l'ancien constructeur pour qu'il appelle le nouveau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public Simulateur() {
        this(11, 20); // on appelle l'autre constructeur en passant les paramètres fixes (comme ça on duplique pas le code)
    }
    public Simulateur(int nombreDeJoueurs, int nombreDeParties) {
     
       tableau = new int[nombreDeJoueurs][nombreDeParties];
    ...
    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. #6
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Je dois quand même changer certaines choses dans les boucle for n'est-ce pas?
    Je ne comprends pas à quoi sert le "this" ici?
    Merci!

  7. #7
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Juke67 Voir le message
    Je dois quand même changer certaines choses dans les boucle for n'est-ce pas?
    Ah, oui, j'avais pas vu que tu faisais les boucles en dur : c'est pas bien ça
    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int i=0, i<tableau.length; i++) {
       for(int j=0; j<tableau[i].length; j++) {
             ...
       }
    }
    cela fonctionne quelque soit la taille de ton tableau... mais tu peux stocker les 2 paramètres dans des variables à part si tu veux, et borner tes boucles sur ces paramètres...

    Citation Envoyé par Juke67 Voir le message
    Je ne comprends pas à quoi sert le "this" ici?
    Merci!
    Le this dans
    public Simulateur() {
    this(11, 20); // on appelle l'autre constructeur en passant les paramètres fixes (comme ça on duplique pas le code)
    }
    Appelle l'autre constructeur de la même classe en passant 11 et 20 en paramètres (quand on veut appeler le constructeur de la classe parent, on utilise super() et quand c'est un constructeur de la classe elle-même, on utilise this()).
    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. #8
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Ok! super! merci beaucoup joel.drigo cela m'aide beaucoup

  9. #9
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Je suis désolé! sans vouloir paraître stupide.. cela m'affiche toujours
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 15
    Pourtant j'ai bien compris et j'ai utilisé tableau.length comme indiqué..

  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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Quel est ton nouveau code pour les 2 constructeurs ?
    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
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    J'ai modifié les boucles for aussi :


    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
    public class Simulateur extends De {
    	private De de;
    	private int[][] tableau;
     
     
     
    	public Simulateur() {
    	    this(11, 20);
    	}
    	public Simulateur(int nbJoueurs, int nbLancers) { 
    		tableau = new int[nbJoueurs][nbLancers];
    		de = new De(1, 6);
    		for (int lig = 0; lig <= tableau.length; lig++) {
    			for (int col = 0; col <= tableau[lig].length; col++) {
    				tableau[lig][col] = 0;
    			}
    		}
    	}
     
    	public void remplir() { // Permet de remplir le tableau
    		for (int lig = 0; lig <= tableau.length; lig++) {
    			for (int col = 0; col <= tableau[lig].length; col++) {
    				tableau[lig][col] = de.Lancer();
    			}
    		}
    	}
     
    	public void afficheLancersJoueur(int numJoueur) { // Permet d'afficher les lancers du joueur dans un tableau
    		String result = "Joueur n°" + numJoueur + " ->";
    		System.out.print(result);
    		for (int col = 0; col <= tableau.length; col++) {
    			System.out.print("\t" + tableau[numJoueur][col]);
     
    		}
    	}
     
    	public void totalJoueur(int numJoueur) { // Calcul le total du joueur, et donne le nombre de 6 obtenu
    		int totalNbJoueur = 0;
    		int totalSix = 0;
    		for (int col = 0; col <= tableau.length; col++) {
    			totalNbJoueur += tableau[numJoueur][col];
    			if (tableau[numJoueur][col] == 6) {
    				totalSix++;
    			}
    		}
    		System.out.println("\n" + "Total du Joueur n°" + numJoueur + " -> "
    				+ totalNbJoueur + " (dont " + totalSix + " six)");
    	}
    }

  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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int lig = 0; lig <= tableau.length; lig++) {
    Les indices de tableau vont de 0 à length-1 : avec le <= ça va de 0 à length et donc ça plante lorsque l'indice est à length avec l'exception ArrayIndexOutOfBound (indice en dehors des limites...).

    Donc il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int lig = 0; lig < tableau.length; lig++) {
    Pareil pour l'autre boucle...
    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
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Super merci ça fonctionne ! je ne savais pas cela, merci !
    Bon, au final c'est vous qui avez fait fonctionner le code, pas moi.. va falloir que je pratique d'avantages

  14. #14
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Bonsoir, plutôt que de créer un nouveau sujet (ça concerne le même TP, bien que je l'ai terminé depuis un baille) je poste ici à nouveau..

    Je suis en train de refaire mon jeu du 421 (voir TP, pas exactement les mêmes règles) à nouveau, mais quelque chose de plus "pousser", enfin j'essaye..

    Voici mon code pour l'instant :

    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
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
     
    public class Jeu421 {
    	private De de;
    	private boolean jouer = false;
    	private boolean estOk = false;
    	private int choix;
     
    	public Jeu421() {
    		List<De> de = new ArrayList<De>();
    		for (int i = 0; i < 3; i++) {
    			de.add(new De(i, 6));
    			de.get(i).Lancer();
    			System.out.println(de.get(i));
     
    		}
     
    	}
     
    	public void jouerBis() {
    		if (jouer) {
    			de = new De(1, 6);
    			System.out.println("Quel dé voulez-vous relancer?");
    			while (!(estOk)) {
    				Scanner sc = new Scanner(System.in);
    				boolean Nombre = true;
    				while (Nombre) {
    					try {
    						choix = (int) Integer.parseInt(sc.next());
    						Nombre = false;
    					} catch (NumberFormatException Nl) {
    						System.out.println("Entrez un nombre");
    					}
    				}
     
    				if (choix == 1) {
    					de.setValeur(0, de.Lancer());
     
    				}
     
    			}
    		}
    	}
     
     
    	public void Gagner() {
    		if () // méthode à compléter (cas de victoire)
    		estOk = true;
    	}
    	public void jouer() {
    		jouer = true;
    	}
    }
    Mais j'ai quelques soucis avec l'arrayList.. en effet à partir d'ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (choix == 1) {
       de.setValeur(0, de.Lancer());
    J'essaye de modifier la valeur du "premier dé" lancé qui est en position 0 de l'arrayList (je crois?) avec la méthode set.. à mon avis j'ai du louper quelques notions, je n'y arrive pas.. quelques explications ne seraient pas de trop car je bute..

    La classe De si besoin..

    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
    public class De {
    	private int numDe;
    	private int valeur;
    	private int nbFaces;
    	private boolean estPipe;
     
    	public De() {
    		nbFaces = 6;
    		valeur = 0;
    	}
     
    	public De(int numDe, int nbFaces) {
    		this.numDe = numDe;
    		this.nbFaces = nbFaces;
     
    	}
     
    	public int Lancer() {
    		if (estPipe == false) {
    			return valeur = (int) (1 + Math.random() * nbFaces);
    		} else {
    			valeur = (int) (1 + Math.random() * nbFaces);
     
    			if (valeur == 3) {
    				valeur = 4;
    			}
    			else if (valeur == 5) {
    				valeur = 1;
    			}
    			else if (valeur == 6) {
    				valeur = 2;
    			}
    			return valeur;
     
    		}
    	}
     
    	public void estPipe() {
    		estPipe = true;
    	}
     
    	public String toString() {
    		return ("dé n°:" + numDe + " valeur :" + valeur);
    	}
     
    	public int getNumDe() {
    		return numDe;
    	}
     
    	public int getValeur(int i) {
    		return valeur;
    	}
     
    	public int getNbFaces() {
    		return nbFaces;
    	}
     
    	public void setValeur(int valeur, int i) {
    		this.valeur = valeur;
    	}
     
    }
    Merci beaucoup !

  15. #15
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    La variable "de" que tu crées dans le constructeur de Jeu421 par List<De> de = new ArrayList<De>(); est locale au constructeur : l'ArrayList n'existe que dans ce contructeur et tu n'auras aucun moyen de la manipuler autre part. La variable de classe "de", déclarée par private De de; est une autre variable de même nom mais qui n'a rien à voir (même pas d'une même type). Dans la méthode jouerBis, de.setValeur(0, de.Lancer()); est un appel de méthode de la variable de classe "de", la seule visible de cette méthode. C'est dailleurs pour cette raison que tu ne peux appeler la méthode ArrayList.set(int, De), qui existe pour ArrayList, mais pas pour De. Le problème, c'est que quand tu fais de.setValeur(0, de.Lancer());, tu appelles une méthode sur un objet qui est censé être référencé par la variable "de", mais cette variable est initialisée à chaque appel de jouerBis, si jouer vaut true, par de = new De(1, 6);. Pour lequel tu mets toujours 0 par de.setValeur(0, de.lancer());, si l'utilisateur saisit 1 (dans le cas contraire, ça laisse valeur à 0, sa valeur d'initialisation par défaut) : de.lancer() change bien la variable valeur, mais comme c'est appelé avant l'exécution du code de la méthode setValeur() et cette méthode affecte à la variable valeur le paramètre valeur, donc 0 (le second paramètre i qui correspond à la valeur déterminée par de.lancer() est ignorée et est donc perdue).
    Bref, ce ne sont pas les seuls problèmes dans ton code : à mon avis, il faut tout reprendre à zéro : emièrement, peut-être devrais-tu simplifier en remplaçant a classe dé par une simple méthode tirageDe() qui renvoit un nombre aléatoire entre 1 et 6, plus une méthode tirageDes(n) qui retourne une liste de n valeurs correspondant à trois appels successifs de cette méthode tirageDe(). La méthode jouer() appelle tirageDes(n) comme ça
    Code pseudocode : 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
    jouer(joueur) { 
     
       liste = liste de dés;
       n=3
       nb=0 // nombre de tirage
       tant que liste ne contient pas 3 valeurs et nb<3 faire 
             tirage = tiragesDes(n)
             nb++
             si nb==3 alors
                ajouter toutes les valeurs de tirage dans liste
             sinon
                 tant que liste ne contient pas 3 valeurs, 
                    demander au joueur de choisir une valeur à conserver dans tirage ou de relancer les autres
                    si valeur choisie
                       ajouter valeur dans liste
                       n--
                    sinon
                       sortir de la boucle
                    fin si
                 fin tant que
            fin si
       fin tant que
       compter les points correspondant aux valeurs dans liste.et les ajouter aux poiints du joueur
    }

    Quand ça fonctionnera, tu pourras toujours modifier les méthodes tirageDe() et tirageDes() pour qu'elles utilisent ta classe De si tu veux.
    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.

  16. #16
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Bonsoir,

    merci de cette réponse, si j'ai bien compris, j'ai commencé à procéder de cette manière :

    j'ai crée une méthode qui retourne une valeur entre 1 et 6;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int TirageDe() {
    		return val = (int) (1 + Math.random() * 6);
    	}
    J'ai commencé à compléter la méthode jouer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void jouer() {
    		List de = new ArrayList();
    		n = 3;
    		nbTirage = 0;
    		while (de.size() < 3 && nbTirage < 3) {
    	}
    Ensuite j'ai crée la méthode tiragesDes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public  Collection tiragesDes() {
    		List tiragesDes = new ArrayList();
    		for(int i = 0; i < 2; i++){ 
    		tiragesDes.add(??);
     
    	}
    mais là je ne vois pas trop quoi faire? je dois ajouter les valeurs directement avec une boucle for? ça c'est le rôle de la méthode tirageDe?
    Désolé, je suis encore débutant en java pour l'instant, mais ça m'intéresse fortement et je compte bien progresser d'avantage, j'ai pas réellement de cours pour apprendre, j'ai juste des TP.

  17. #17
    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 : 56
    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
    Billets dans le blog
    2
    Par défaut
    Déjà, pour la méthode tirageDe(), inutile de passer par une variable (val dans ton code, que tu as dû déclarer en variable de classe en plus). Le tirage du dé, on a besoin en dehors de la méthode tirageDe(), dans la méthode qui l'appelle, donc inutile de le stocker.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int TirageDe() {
    		return 1 + (int) (Math.random() * 6);
    }
    Ensuite, pour tirageDes(int n), le but étant de pouvoir lancer plusieurs dés (au 421 on lance les dés, puis on conserve certains dés et on relance les autres, jusqu'à trois max. Dans l'algo que je t'ai donné, on ne peut pas relancer un dé qu'on a déjà mis de côté : je ne me souviens plus exactement des règles, mais je vais le changer un peu parce que c'est plus facile à coder si on peut relancer des dès déjà mis de côté.

    Toujours est-il qu'on a besoin de lancer un certain nombre de dés :

    on retourne une List de Integer : pas besoin de retourner ArrayList, on a juste de besoin de parcourir la liste sans se préoocuper du type de liste (d'ailleurs on pourrait retourner une Collection<Integer> comme tu as fait, ou même un Iterator<Integer>. Cependant, comme on doit choisir 1, 2 ou 3 dés à mettre de côté, c'est mieux de pouvoir accèder directement au dé numéro 1, ou numéro 2 ou 3. Seule List permet de faire ça : donc on va retourner une List

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public List<Integer> tirageDes(int n) {  // on retourne une liste de n tirages de dés
         List<Integer> liste = new ArrayList<>(); // on est obligé de mettre le vrai type après le new pour indiquer quelle classe exacte on veut utiliser
         for(int i=0; i<n; i++) { // on fait une boucle de 0 à n exclu, ce qui fait bien n itérations
            liste.add( tirageDe() ); // on tire un dé et on le stocke dans la liste
         }
         return liste; // on retourne la liste de tirage à l'appelant.
    }
    Citation Envoyé par Juke67 Voir le message

    J'ai commencé à compléter la méthode jouer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void jouer() {
    		List de = new ArrayList();
    		n = 3;
    		nbTirage = 0;
    		while (de.size() < 3 && nbTirage < 3) {
    	}
    Il faut donc appeler tirageDes(n). A chaque itération, on tire un nombre de dés (3 au départ, moins ensuite), on demande à l'utilisateur quels dés ils veut conserver, et on relancer.

    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
    public void jouer() {
    		List<Integer> des = new ArrayList<>(); // les dés du joueur (ceux qu'il conserve pour les poins) 
    		int n = 3;
    		int nbTirage = 0; // on a le droit à maximum trois tirages
    		while (des.size() < 3 && nbTirage < 3) { // si on a pas mis de côté 3 dés, et qu'on a encore le droit de lancer les dés
                        List<Integer> tirage = tirageDes(n) ); // on tire n dés, et on les récupère dans une liste
                        tirage.addAll( des ) ; // on ajoute au tirage les dés déjà conservés le coup d'avant
                        des.clear(); // on vide la liste de dés conservé
                        nbTirage++; // on compte le tirage qu'on vient de faire
                        if ( nbTirage<3 ) {
                            // là, tu vas demander quels dés le joueur veut conserver
                            // et les stocker dans des. il faut éviter que le joueur puisse choisir 2 fois le même dé
                            // le moyen le plus simple est de faire comme suit (même si ce n'est pas le plus pratique pour le joueur
                            for( int de : tirage ) { // on parcourt les valeur dans tirage
                                System.out.println("Voulez-vous conserver " + de  + (O/N)");
                                boolean reponse = lireReponseOuiNon(); // je te laisse pour l'instant coder cette méthode lireReponseOuiNon()
                                if ( reponse ) { // si la réponse est oui
                                   des.add( de ); // on stocke le dé pour le lancer suivant
                                } 
                            }
                            n = 3 - des.size(); // on recalcule le nombre de dés qu'on doit relancer = 3 moins le nombre de dés mis de côté
                        }
                        else {
                            // on a plus le droit de relancer
                            des.addAll( tirage ); // on doit prendre tous les dés tels quels
                        }
                    }
     
                    // maintenant des contient la liste des dés : on peut compter les points...
                    // ça aussi, je te laisse t'en occuper...
     
    	}
    [/QUOTE]

    Si on voulais pour demander à l'utilisateur le dé qu'il veut conserver et qu'il saisisse son numéro, il faudrait savoir quels dés il a déjà pris : on peut utiliser une List ou un tableau de boolean pour ça :

    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
     
    boolean desPris = new boolean[tirage.size()]; // le tableau est automatiquement rempli de false
    int reponse;
    do {
        System.out.println("Donner le numéro de dés que vous voulez conserver ou 0 pour relancer : ");
        boolean choixValide=false; // pour savoir quand on sort de la boucle suivante
        do {
            response = lireReponse();
            if ( response==0 ) { // c'est un choix valide, qui permet de relancer
                choixValide=true;
            }
            else if ( reponse>0 && reponse<=desPris.length ) { // si on a saisi un numéro de dé et que celui là est déjà pris
                if ( desPris[reponse-1] ) { // si le dé a déjà été marqué "pris"
                     System.out.println("Ce dé a déjà été mis de côté");
                }
                else {
                    choixValide=true; // sinon le choix est valide
                }
            }
            else {
                 // dans tous les autres cas, le choix est invalide
                 System.out.println("Il n'y a que " + tirage.size() +" dés...");
            }
        } while( !choixValide ) ;
        if ( reponse>0 ) { // si ce n'est pas un relancé
            des.add( tirage.get(reponse-1) )// on doit stocker le dé choisi
            desPris[reponse-1]=true; // on marque le dé comme pris
        }
    }
    while( reponse != 0 ); // tant qu'on demande pas de relancer, on redemande un dé à conserver
    Variante pour le while à la fin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while( reponse != 0 && des.size()<tirage.size() ); // tant qu'on demande pas de relancer et qu'on a pas pris tous les dés, on redemande un dé à conserver
    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.

  18. #18
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Mars 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 20
    Par défaut
    Bonjour,

    Désolé je n'avais plus internet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public boolean lireReponseOuiNon() {
    		Scanner sc = new Scanner(System.in);
    		char lire;
    		lire = sc.nextLine().charAt(0);
    		if (lire == 'O') {
    			return true;
    		} else {
    			System.out.println("Dé non conservé");
    		}
    		return false;
     
     
    	}
    Je suis pas certain que ce soit ça mais ça a l'air de fonctionner

Discussions similaires

  1. Problème avec les tableaux de char.
    Par Letinono dans le forum Débuter
    Réponses: 3
    Dernier message: 29/05/2008, 17h24
  2. problème avec les tableaux
    Par scary dans le forum Débuter
    Réponses: 2
    Dernier message: 30/03/2008, 00h44
  3. Problème avec les tableaux de pointeurs
    Par TheDoci dans le forum C
    Réponses: 2
    Dernier message: 07/01/2007, 14h04
  4. [Débutant] Problèmes avec les tableaux.
    Par Lwq dans le forum C++
    Réponses: 6
    Dernier message: 01/11/2005, 13h54

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