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

Collection et Stream Java Discussion :

retour d'ArrayList incorrect


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Par défaut retour d'ArrayList incorrect
    Bonjour !

    Bonjour !

    Je suis en train de manipuler des ArrayList<monObjet> .
    Je veux créer un ArrayList "molecule" contenant des Acides Aminé.
    Chaque Acide Amine est un ArrayList d'atomes.

    Mon probleme, c"est que lorsque je fais un affichage a la fin du traitement, l'ArrayList "molecule", ne contient que des copies d'un AcideAminé : celui crée en dernier.
    Je dois donc mal gérer des pointeurs ( ca existe en java ??) ou faire une erreur quelque part

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    while (ligne != null) {
      if (condition){
        //Nouvel acide amine
        AcideAmine currentAA = new AcideAmine(ligne.substring(17,20).toCharArray());
        while (autreCondition){ 
          //Creation d'un objet Atom	 
          atomname = ligne.substring(13,16).toCharArray();
          Atom atomTrouve = new Atom(atomname);
          //Ajout de l'atome dans l'AA courant
          currentAA.addAtom(atomTrouve);
          ligne = br.readLine();
        } 
        System.out.print("CurrentAA = ");
        currentAA.print();
        aaArrayList.add(currentAA);
        currentAA = null ;  //Au cas ou
      }
    }
    }
    Je vous remercie d'avance pour votre aide !

  2. #2
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Dans ton code que tu as fournis, tu ne crée

    Qu'un seul acideAminé, avec une arrayList d'atomes, c'est exact?
    Donc si tu veux que l'on voit quelques chose de mal fait peut-etre faudrait-il donné le reste,

    Les pointeurs en java , . En java les pointeurs existents mais tu ne peux pas les manipulés. En gros, on parle pas de pointeur mais de reference d'objet.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Par défaut
    En fait, ce que je fais, c'est que je lis un fichier organisé de la maniere suivante :
    Sur chaque ligne, il y a un atome, et un numero correspondant a l'acide aminé auquel il appartient.

    A chaque fois que j'entre dans le premier while , je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     AcideAmine currentAA = new AcideAmine("nom")
    ou AcideAmine est un arraylist avec des methodes définies

    Tant que c'est le meme acide amine , j'ajoute au currentAA les atomes que je lis,
    avec la methode de ArrayList : add();

    Maintenant , quand je trouve un acide amine different, j'ajoute l'acide amine a un arraylist aaArrayList par la methode add(); et je reviens au premier while.

    Donc logiquement , dans mon aaArrayList, j'ai un ArrayList avec tout les acides amines que j'ai lus, non ?

    Par rapport au code , quelle partie manque t'il ? car je ne peux pas metttre tout le code , ca serait assez gros :p

    Merci

  4. #4
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    A cet endroit là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    AcideAmine currentAA = new AcideAmine(ligne.substring(17,20).toCharArray());
        while (autreCondition){ 
          //Creation d'un objet Atom	 
          atomname = ligne.substring(13,16).toCharArray();
          Atom atomTrouve = new Atom(atomname);
          //Ajout de l'atome dans l'AA courant
          currentAA.addAtom(atomTrouve);
          ligne = br.readLine();
        }
    tu n'as pas oublié de faire un ligne = br.readLine(); avant d'entrer dans la boucle ?

  5. #5
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Il manquerait les parties qui sont succeptibles de modifier des variables de ce petit bout de code.
    Comme autreCondition, br...

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Par défaut
    Schniouf :
    Merci pour ta réponse, mais si je fais un "println" au fur et a mesure que j'entre les données dans le aaArrayList , j'obtiens les bons résultats , maintenant, lorsque je récupère le ArrayList une fois que le traitement est fini, toutes les cases sont les memes, et c"est la derniere case qui va écraser toutes les autres. Donc je pense plutot que l'erreur vienne de l'affectation , ou qu'il y aie un mauvais adressage d'objet , ou un truc dans le genre :p

    MaxF1 :
    voici la methode liremol en entiere , c'est surement un peu lourd, dsl

    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
     
    //Attributs
    public static ArrayList<AcideAmine> aaList;
    public static File fichier;
    public static float[] centre;
     
    Molecule(File fic){   // <------ CONSTRUCTEUR
       aaList = new ArrayList<AcideAmine>();
       fichier = fic;
       centre = new float[] {0,0,0};
       aaList = lireMol();
       System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-");
       aaList.get(3).print();  // <---- Affichage pas bon
       System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-");
    }
     
    public ArrayList<AcideAmine> lireMol(){
       ArrayList<AcideAmine> aaArrayList = new ArrayList<AcideAmine>();
       aaArrayList.clear();
       aaList.clear();
       String ligne;
       char[] atomname;
       float x , y , z, xsum, ysum, zsum, nbatom;
       xsum = ysum = zsum = nbatom =0;
       int noAA;
       // Déclaration de la source 
       try {
          InputStream is = new FileInputStream(fichier);
          Reader r = new InputStreamReader(is);
          BufferedReader br = new BufferedReader(r);
          System.out.println("Début d'annalyse");
          ligne = br.readLine(); // <-------- Je lis la premiere ligne 
          //Parcours du fichier entier
          while (ligne != null){  // <-------- Tant qu'il reste des lignes
                if ((ligne.startsWith("ATOM")) & (ligne.charAt(16)!='B') ){ // <--- Petit filtre pour eliminer les mauvaises lignes
                noAA = Integer.valueOf(ligne.substring(23,26).trim());
                //Nouvel acide amine
                AcideAmine currentAA = new AcideAmine(ligne.substring(17,20).toCharArray());
                while ((Integer.valueOf(ligne.substring(23,26).trim()) == noAA) & (ligne.startsWith("ATOM"))){  /// < -------- Tant que je suis dans le meme acide amine
                   //Creation d'un objet Atom
                   atomname = ligne.substring(13,16).toCharArray();
                   x = Float.valueOf(ligne.substring(32,38));
                   y = Float.valueOf(ligne.substring(40,46));
                   z = Float.valueOf(ligne.substring(48,54));
                   Atom atomTrouve = new Atom(x,y,z,atomname);
                   //Ajout de l'atome dans l'AA courant
                   currentAA.addAtom(atomTrouve); // <------ J'ajoute l'atome dans l'acide amine
                   //Centrage de la molecule
                   xsum+=x;
                   ysum+=y;
                   zsum+=z;
                   nbatom++;
                   ligne = br.readLine(); //  <------ Ligne suivante
                   }
                currentAA.setBondList();//  <-------- remplit un tableau dans l'objet cirrentAA
                System.out.print("CurrentAA = ");
                currentAA.print(); // <-------------*** AFFICHAGE CORRECT !!!  ***
                aaArrayList.add(currentAA);  // <------- ERREUR ICI ???
                currentAA = null ; //au cas ou
                }		
          if (ligne.startsWith("ATOM")== false ){
          ligne = br.readLine();
          }
       }
       centre[0]= xsum/nbatom;
       centre[1]= ysum/nbatom;
       centre[2]= zsum/nbatom;
       System.out.println("Fin d'annalyse");
       is.close();
       } catch (FileNotFoundException e) {
       e.printStackTrace();
       } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
       }
       return aaArrayList;   // <----- Tableau mal rempli ici
    }
    maintenant si je fais un affichage aaArrayList , le dernier element sera répété plein de fois ( taille du tableau )

    Merci
    Ca me dépane enormement , je bloque dessus depuis quelques jours ....

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

Discussions similaires

  1. Erreur Retour d'accord Paypal incorrect
    Par centaure-net dans le forum WebDev
    Réponses: 1
    Dernier message: 15/01/2016, 04h07
  2. Probléme de retour d'un type ArrayList dans une méthode JAVA
    Par KnowPart dans le forum Collection et Stream
    Réponses: 20
    Dernier message: 21/01/2011, 09h40
  3. [Formule]Retour incorrect avec BDSOMME
    Par orangemeca dans le forum Excel
    Réponses: 2
    Dernier message: 08/05/2007, 19h48
  4. Retour de Sizeof() incorrect
    Par poof65 dans le forum C++
    Réponses: 9
    Dernier message: 13/01/2007, 16h38
  5. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47

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