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 :

erreur bete de java


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut erreur bete de java



    j ai une erreur je sais que c est bête mais j arrive pas la trouve en faite, j ai
    un tableau d objet Personne(Id, Name)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int index=0;
                Personne[] TabPersonne = new Personne[10000];
                Personne tempPersonne = new Personne();
                tempPersonne.setName("HELP");
                tempPersonne.setId("MERCI");
     
                TabPersonne[index]=tempPersonne;
                index++;
    tempPersonne.setNAme("****");
    TabPersonne[index]=tempPersonne;

    après j ai mon tableau remplie que par ******* ???????????????????????????????????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int i=0;
    while(i<TabPersonne.length){
    system.out(TabPersonne[i].getName);
    i++
    }
    *****
    *****

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 36
    Par défaut
    Salut r0nsync,

    à première vue, ton erreur est due au fait que tu ne crées qu'une seule instance de Personne que tu affectes à tempPersonne.

    Ensuite, tu affectes à tous les éléments de ton tableau cette même instance.
    Pas étonnant que lorsque tu modifies cette instance, c'est l'ensemble des éléments du tableau qui sont apparamment modifiés.

    Pour t'en sortir, il te faudrait écrire autant de fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    temPersonne=new Personne();
    que tu as de personnes à caser dans le tableau.

    Mes 2€ centimes.

    MarkH

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    en faite moi je veux stock les tempPersonne dans mon tableau afin de les utilises plus tard .

    j ai essayé de crée une instance de personne a chaque fois mais j ai le meme résultat

  4. #4
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Personne[] TabPersonne = new Personne[10000];
     
    for(int i=0;i<10000;i++){
                Personne tempPersonne = new Personne();
                tempPersonne.setName("HELP " + i);
                tempPersonne.setId("MERCI " + i); 
                TabPersonne[i]=tempPersonne;
    }
    ... ce n'est pas une bonne solution (surtout un tableau de 10000)
    utilises plutot une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList<Personne> personnes = new ArrayList<Personne>();

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 36
    Par défaut
    Pour fixer les choses, voici un bout de code qui remplit un tableau de trois personnnes et qui tente de rester proche de ce que tu as écrit :
    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
     
    Personne[] tabPersonne=new Personne[3];
     
    int index=0;
    Personne tempPersonne=new Personne();
    tempPersonne.setName("Dupont");
    tempPersonne.setId("12323");
    tabPersonne[index]=tempPersonne;
     
    index++;
    tempPersonne=new Personne();
    tempPersonne.setName("Durand");
    tempPersonne.setId("45654");
    tabPersonne[index]=tempPersonne;
     
    index++;
    tempPersonne=new Personne();
    tempPersonne.setName("Martin");
    tempPersonne.setId("567657");
    tabPersonne[index]=tempPersonne;
     
    index=0;
    while (index<tabPersonne.length) {
       System.out.println(tabPersonne[index].getName());
       index++;
    }
    Je doute fort que l'affichage produise trois fois le même nom....

    MarkH

    P.S. (pour les puristes Java qui liraient ce code) : dans une *vraie* appli, je n'écrirais sûrement pas ça comme ça

  6. #6
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    je suis oblige d utilise java 1.4 donc je pence que je ne peux pas utilise les List

    si non enfaite je ne connais pas la taille de mon TAbpersonne a lavance donc je peux pas faire un for ???
    vous aurez pas une autre solution

  7. #7
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Les Lists sont là depuis Java 1.2 alors tu peux les utiliser sans problèmes.

    D'autant plus si tu ne connais pas le nombre d'instances de Personnes que tu dois stocker.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Par défaut
    Il me semble que les ArrayList existent bien dans le java 1.4.

    Parce que lorsque tu ne connais pas le nombre d'éléments que tu dois sauvegarder, je te recommande les listes (ou les hashmap si tu dois pouvoir retrouver facilement un de ces objets).

  9. #9
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    Personne[] Personnexml = new Personne[10000]

    voila mon Code, enfaite il est un peux plus compliqué
    j ai des personnes que je lire dans un fichier xml et je veux les stock ds un tableau

    List listPersonne = XPath.selectNodes(document, "//value");
    Iterator i = listPersonnes.iterator();
    while (i.hasNext()) {
    Element courant = (Element) i.next();
    Personne temp_Personne = new Personne();
    temp_Personne.setMPersonneName(courant.getChildText("name"));
    Personnexml[indexPersonne]=temp_Personne;
    System.out.println( Personnexml[indexPersonne].getMPersonneName()+
    "---"+Personnexml[0].getMPersonneName());
    indexPersonne=indexPersonne+1;

    }


    et j ai comme affichage

    dadazda---dadazda
    ddddddd---ddddddd
    JPC_99---JPC_99
    TOTO4---TOTO4
    TOTO5---TOTO5

  10. #10
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    voila l ereur que j ai quand j utilise ArrayList comme ça
    """ArrayList<Personne> list_personne = new ArrayList<Personne>();""""


    Erreur de syntaxe. Les types paramétrés sont disponibles uniquement si le niveau du source est 5.0.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Par défaut
    Ces ArrayList n'existent que depuis la 5.0 c'est vrai.
    Donc il faut utiliser ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList listePersonne = new ArrayList();
    Pour ajouter une personne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listePersonne.add(personne);
    Et pour récupérer un objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne pers = (Personne)listePersonne.get(0);

  12. #12
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    j ai change mon code et j ai toujour le meme blem
    ArrayList list_Personne = new ArrayList()
    List listPersonnes = XPath.selectNodes(document, "//value");
    Iterator i = listPersonnes.iterator();
    while (i.hasNext()) {
    Element courant = (Element) i.next();
    Personne temp_Personne = new Personne();
    temp_Personne.setMPersonneName(courant.getChildText("name"));
    list_Personne.add(temp_Personne);
    System.out.println(temp.getMPersonneName()+" : "+indexPersonne );
    indexPersonne=indexPersonne+1;

    }

    Iterator j = list_Personne.iterator();
    while(j.hasNext() ){
    Personne temp = (Personne)j.next();
    System.out.println("personnexml "+temp.getMPersonneName()+" de j :");
    }




    resultat
    dadazda : 0
    ddddddd : 1
    ....
    TOTO4 : 55
    TOTO5 : 56

    et ????

    personnexml TOTO5 de j :0
    personnexml TOTO5 de j :1
    ...............
    personnexml TOTO5 de j :55
    personnexml TOTO5 de j :56

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Par défaut
    Ca doit venir de la lecture de ton xml alors.
    T'as a débugé ton programme ? Pour essayer de voir ce qui est réellement injecté dans ton objet Personne ?

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    Hum... je dois avouer que ton problème me laisse perplexe

    Le seul cas que je vois possible est que les champs de ta classe Personne sont statiques.

    Est-ce que tu pourrais nous envoyer le code de la classe Personne.

    Si le code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Personne {
    static String name;
    Personne(){}
     
    public void setName (String n){
    this.name=n;
    }
     
    public String getName (){
    return name;
    }
    }
    Alors ton problème est normal, il suffit d'enlever le static pour que tout fonctionne

  15. #15
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Par défaut
    BRAVo




    chapo

    en fait sa change koi pour le code !!!!!
    je voi pas ou il est le blem

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut
    en mettant ta variable en static, ce sera la meme pour toutes tes instances, hors ce n'est pas ce que tu veux et c'est pourquoi tu avais toujours le meme nom de Personne

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    Comme l'a dit Caster, en object on distingue deux types de variables:
    • Les variables de classes
    • les variables d'instances


    Les variables de classes sont stockées au niveau de la classe et sont donc communues à toutes instances de la classe.

    Par contre les variables d'instances ne sont visibles que par l'instance elle même. Les autres instances de la classe ne les voient pas.

    Pour en revenir au "static", lorsque tu mets static devant le nom d'un membre d'une classe. Ce membre est un "variable de la classe".

    J'espère que c'est clair.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par défaut
    Citation Envoyé par eclesia Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Personne[] TabPersonne = new Personne[10000];
     
    for(int i=0;i<10000;i++){
                Personne tempPersonne = new Personne();
                tempPersonne.setName("HELP " + i);
                tempPersonne.setId("MERCI " + i); 
                TabPersonne[i]=tempPersonne;
    }
    ... ce n'est pas une bonne solution (surtout un tableau de 10000)
    utilises plutot une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList<Personne> personnes = new ArrayList<Personne>();
    Pourquoi est-ce que ce n'est pas une bonne solution d'utiliser un tableau de 10000 éléments plutôt qu'une liste ?

  19. #19
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par yarf Voir le message
    Pourquoi est-ce que ce n'est pas une bonne solution d'utiliser un tableau de 10000 éléments plutôt qu'une liste ?
    Les tableaux ne sont pas manipulable aussi facilement que les List, et à moins de n'avoir qu'un nombre d'élément fixe ou d'autre impératif pour utiliser un tableau (parce que doit le passer à une méthode par exemple), il est généralement plus simple d'utiliser une List...

    Surtout avec les Generics qui simplifie leurs utilisations...

    Je rappelle quand même :
    • Que les ArrayList sont implémenté en utilisant des tableaux, et propose donc grosso-modo les mêmes performances qu'un tableau.
    • Qu'il est possible de définir la taille initial d'une List pour éviter de trop multiple redimensionnement lorsqu'on connait la taille finale (la plupart des implémentations propose un tel constructeur) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ArrayList<Personne> personnes = new ArrayList<Personne>( 10000 );


    a++

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

Discussions similaires

  1. ERREUR UPDATE Avec java et oracle
    Par gloglo dans le forum JDBC
    Réponses: 7
    Dernier message: 20/10/2006, 09h35
  2. un problème avec un tableau d'objet, erreur bete ?
    Par Heero_2040 dans le forum C++
    Réponses: 12
    Dernier message: 13/07/2006, 13h20
  3. Erreur de connexion : java RMI & linux
    Par pedouille dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 16/05/2006, 20h04
  4. Erreur appel fonction java d'une jsp
    Par itachi38 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 29/04/2006, 16h51
  5. [XSL] [debutant] erreur bete avec choose
    Par enigma dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 21/07/2005, 17h58

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