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 :

[débutant] Problème avec Vector !


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Par défaut [débutant] Problème avec Vector !
    Bonjour tout le monde !

    J'ai 3 classes : une classe pions.java, une classe couleurs.java et une autre jeu.java.
    dans la classe pions j'ai ceci :

    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
    package mastermind;
    import java.util.*;
    import utilensemjava.*;
     
     
    /**
     * <p>Titre : </p>
     *
     * <p>Description : </p>
     *
     * <p>Copyright : Copyright (c) 2009</p>
     *
     * <p>Société : </p>
     *
     * @author non attribuable
     * @version 1.0
     */
    public class pions {
     
        Vector pions = new Vector();
     
    // creation du vecteur pions
     
        public Vector pions() {
     
            pions.addElement(new couleurs("blanc"));
            pions.addElement(new couleurs("rouge"));
            pions.addElement(new couleurs("vert"));
            pions.addElement(new couleurs("bleu"));
            pions.addElement(new couleurs("rose"));
            pions.addElement(new couleurs("orange"));
            pions.addElement(new couleurs("jaune"));
            pions.addElement(new couleurs("violet"));
     
            return pions;
        }
    }
    dans la classe couleurs :

    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
    package mastermind;
    import java.util.*;
    import utilensemjava.*;
     
     
    /**
     * <p>Titre : </p>
     *
     * <p>Description : </p>
     *
     * <p>Copyright : Copyright (c) 2009</p>
     *
     * <p>Société : </p>
     *
     * @author non attribuable
     * @version 1.0
     */
     
     
    //création d'objets couleur
     
    public class couleurs {
     
    String couleur;
     
    public couleurs(String nom) {
     
    couleur=nom;
     
     }
    }
    et dans la classe jeu.java :

    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
    package mastermind;
    import java.util.*;
    import utilensemjava.*;
     
    /**
     * <p>Titre : </p>
     *
     * <p>Description : </p>
     *
     * <p>Copyright : Copyright (c) 2009</p>
     *
     * <p>Société : </p>
     *
     * @author non attribuable
     * @version 1.0
     */
     
     
    public class jeu {
     
    boolean gagner;
    Vector proposition = new Vector();
    // on cree 2 vecteurs pour stocker les reponses utilisateurs a chaque proposition pour les comparer
    Vector bonnesCouleurs = new Vector();
    Vector bienPlaces = new Vector();
    //On importe l'objet pions
    pions V=new pions();
    Vector pionsincertains=new Vector();
     
    public jeu() {
     
    int pcjoue=Lecture.lireEntier("Tapez 1 si vous voulez jouer contre l'ordinateur ! Sinon tapez 0 ");
     
    // Si c'est le pc qui joue
    if(pcjoue==1) {
     
     
        // premiere proposition aleatoire de l'ordinateur
        for(int p=1;p<=4;p++) {
     
        Random alea=new Random();
        int n=alea.nextInt(5);
        proposition.addElement(V.pions.elementAt(n));
        }
     
        // on affiche la proposition
        for (int i = 0; i < ((int) proposition.size()); i++) {
           System.out.println((((Vector)proposition.elementAt(i))));
        }
    (je n'ai pas mis en entier la classe jeu)

    Mon problème est le suivant : quand je compile mon projet, tout va bien...seulement quand je rentre "1" dans la console...je rentre dans la condition pcjoue==1 et la c'est le drame !

    j'obtiens cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Tapez 1 si vous voulez jouer contre l'ordinateur ! Sinon tapez 0 1
     
    java.lang.ArrayIndexOutOfBoundsException: 2 >= 0
    	at java.util.Vector.elementAt(Vector.java:431)
    	at mastermind.jeu.<init>(jeu.java:41)
    Le problème ce situe au niveau de la boucle for p avec le random et l'ajout d'éléments dans le vecteur proposition...mais je ne voie pas du tout pourquoi cela ne marche pas ! Est ce que quelq'un pourrai m'aider svp ?

    Bonne apres midi ! et merci

  2. #2
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    Plusieurs trucs que je ne comprend pas, ici tu as une classe qui s'appelle pions...
    et la tu as une méthode qui porte le nom de la classe MAIS qui n'ai pas un constructeur puisse qu'un constructeur ne doit rien retourner...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Vector pions() {
    ici je ne comprend pas non plus,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     proposition.addElement(V.pions.elementAt(n));
    tu récupère ton attribut pions dans la classe pions ... il faut utiliser une méthodes get pour faire cela.. et puisque tu n'a pas appelé la méthodes pions() et bien ton vector est vide... C'est donc normal si il te signale que tu sort des limites.


    Conclusion :
    Pour nommer tes méthodes, tes arguments et tes classes tu utilises toujours pions... c'est original

    Finalement:

    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 pions {
     
        private Vector pions = new Vector();
     
    // creation du vecteur pions
     
        public pions() {
     
            pions.addElement(new couleurs("blanc"));
            pions.addElement(new couleurs("rouge"));
            pions.addElement(new couleurs("vert"));
            pions.addElement(new couleurs("bleu"));
            pions.addElement(new couleurs("rose"));
            pions.addElement(new couleurs("orange"));
            pions.addElement(new couleurs("jaune"));
            pions.addElement(new couleurs("violet"));
        }
        public Vector getPions(){
            return pions;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     proposition.addElement(V.getPions().elementAt(n));

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Par défaut
    ok d'accord...j'ai quelques progrès à faire en java moi..., je test ça et je te dis si ça marche !

  4. #4
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Bonjour,

    Je pense que la premiere chose à faire avant de commencer à debuguer, c'est déjà de rendre ton code conforme aux conventions de codage Java.

    C'est important car ça permet à chacun d'entre nous de pouvoir lire rapidement ton code.

    Par exemple, la classe Pion s'écrira plutot:

    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
     
    import java.util.ArrayList;
    import java.util.List;
     
    public class Pion {
     
        List<Couleur> pions = new ArrayList<Couleur>();
     
        public Pion() {
            pions.add(new Couleur(Constante.BLANC));
            pions.add(new Couleur(Constante.ROUGE));
            // ...
        }
     
        public List<Couleur> getPions() {
            return pions;
        }
     
        public void setPions(List<Couleur> pions) {
            this.pions = pions;
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Couleur {
        public Couleur(String string) {
            //...
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Constante {
        public static final String BLANC = "blanc";
        public static final String ROUGE = "rouge";
     
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Par défaut
    Ivelios, ta solution a marché je te remercie beaucoup...cependant j'ai maintenant une erreur au niveau de l'affichage de la proposition juste après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     // affichage de la proposition
                for (int i = 0; i < ((int) proposition.size()); i++) {
                    System.out.println((((Vector)proposition.elementAt(i))));
                }
    voici l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.lang.ClassCastException
    	at mastermind.jeu.<init>(jeu.java:48)
    Auriez vous une idée ?

    merci zorm pour tes remarques concernant la présentation de mon code. Encore une fois désolé, je ne suis pas expert en java malheuresement.

  6. #6
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Il s'agit d'une erreur de cast, c'est à dire que tu forces un type/objet à être considérée comme étant un autre type/objet.
    En gros, tu as proposition.elementAt(i) qui retourne un objet couleurs (suivant ton code) et tu essayes de le transformer en Vector ce qui crash.

    Citation Envoyé par syl55 Voir le message
    merci zorm pour tes remarques concernant la présentation de mon code. Encore une fois désolé, je ne suis pas expert en java malheureusement.
    Ces remarques ne sont pas anodines, il ne s'agit pas là de devenir expert mais de prendre rapidement les bons réflexes. C'est important si tu souhaites un jour faire du java dans le milieu professionnel par exemple.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Par défaut
    Citation Envoyé par zorm Voir le message
    Il s'agit d'une erreur de cast, c'est à dire que tu forces un type/objet à être considérée comme étant un autre type/objet.
    En gros, tu as proposition.elementAt(i) qui retourne un objet couleurs (suivant ton code) et tu essayes de le transformer en Vector ce qui crash.
    Comment je dois faire dans ce cas pour afficher le vecteur proposition ? c'est a dire afficher dans la console par exemple, rouge bleu vert violet ?

  8. #8
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    quand tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proposition.elementAt(i)
    Il te retourne comme objet ...... Couleur puisse que ce qu'il y a dans ton Vector ce sont des Couleur.

    Donc, dans ta classe Couleur tu nous fait une méthode getCouleur() qui retourne ton argument couleur et après tu pourra faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    proposition.elementAt(i).getCouleur()

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

Discussions similaires

  1. [Débutant] Problème avec Dev-Cpp 4.9.9.0
    Par P4Pi dans le forum Dev-C++
    Réponses: 7
    Dernier message: 16/01/2010, 16h48
  2. [Débutant]Problème avec les timers
    Par mickael777 dans le forum MFC
    Réponses: 1
    Dernier message: 11/04/2005, 11h00
  3. [débutant] problème avec le curseur (sablier)
    Par bat dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 01/12/2004, 08h26
  4. [débutant] problème avec un "if"
    Par pingoui dans le forum Langage
    Réponses: 10
    Dernier message: 11/08/2004, 09h46
  5. [débutant] Problèmes avec CRegKey
    Par Pedro dans le forum MFC
    Réponses: 4
    Dernier message: 10/11/2003, 15h28

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