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 :

Parcours d'un ArrayList


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 86
    Par défaut Parcours d'un ArrayList
    Salut
    j'ai une BDD "diabete.txt" où chaque ligne représente un patient et chaque colonne est une caractéristique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1.0000  89.0000  66.0000  23.0000  94.0000  28.1000  0.1670   21.0000     0
    0         137.000   40.0000  35.0000 168.000   43.1000  2.2880  33.0000    1.000
    3.0000  78.0000  50.0000  32.0000  88.0000  31.0000   0.2480  26.0000   2.000
    j'ai représenté chaque patient par la classe Antigene:
    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
     
    public class Antigene implements Serializable{
     
        private final double [] attributs;// les 8 premières colonnes
        private final int classId;// la 9eme colonne
     
        public Antigene (double [] aAttributs, int aClassIndex)
    	{
    		attributs = aAttributs;
    		classId = aClassIndex;
     
    	}
    	public double [] getAttributes()
    	{
    		return attributs;
    	}	
    	public int getClassIndex()
    	{
    		return classId;
    	}
     
    }
    et j'ai utilisé un ArrayList pour stoker tout les patient:
    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
     
    public class EnsembleAg implements Serializable{
     
    	protected final ArrayList<Antigene> antigenes;
    	Scanner scanner;
    	Antigene ag;
    	int numAttribut;
     
    	public EnsembleAg(String cheminFichier, int numAttributs){
    		numAttribut=numAttributs;
    		double [] aAttributs = new double[numAttribut]; 
    		antigenes= new ArrayList<Antigene>();
    		int aClassIndex = 4;		
    		int i=0;
            try {
            	scanner=new Scanner(new File(cheminFichier));        	
            	 double champ;
     
               	 while (scanner.hasNext()) {  
               		for (int j=0; j<numAttribut; j++){
               	     champ = Double.parseDouble(scanner.next());             	     
               	     aAttributs[j]=champ;           	  
               	 }
               		champ = Double.parseDouble(scanner.next());
               		aClassIndex=(int)champ; 
               		ag=new Antigene(aAttributs,aClassIndex);
               		System.out.println(ag);           		               	
               		antigenes.add(ag);
               	 }            		
            	 scanner.close();        	
       		  for  (int t=0; t<antigenes.size(); t++)    {	
               	Antigene a=antigenes.get(t) ;
               	System.out.println(a+" "+a.getClassIndex());
               	double [] aAttribut=a.getAttributes();
               	for(int j=0; j<numAttribut; j++){        		
               		System.out.println(j+" "+aAttribut[j]);
               	}
               }
            } catch (Exception e) {
             e.printStackTrace();
            }
    	}
    le problème c'est que quand je parcours le tableau "antigenes" , pour la classe de chaque patient j'obtiens la classe correcte mais pour le le tableau aAttribut qui contient les 8 caractéristiques j'obtiens pour les 3 patients les caractéristiques du dernier patient:
    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
     
    init.Antigene@503429 0
    0 3.0
    1 78.0
    2 50.0
    3 32.0
    4 88.0
    5 31.0
    6 0.248
    7 26.0
    init.Antigene@1908ca1 1
    0 3.0
    1 78.0
    2 50.0
    3 32.0
    4 88.0
    5 31.0
    6 0.248
    7 26.0
    init.Antigene@100ab23 2
    0 3.0
    1 78.0
    2 50.0
    3 32.0
    4 88.0
    5 31.0
    6 0.248
    7 26.0
    si quelqu'un vois où est le problème? car moi j'ai passé toute la journée à regarder ce code et rien

    merci pour votre aide

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    parce que tu ne fait pas de nouvelle instance de ton tableau attribut à chaque boucle, tu réutilise le même, donc tu écrase les données précédente. Il manque un "new" dans ta boucle.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ton new double[] est en dehors de la boucle. Ça veut dire que tu n'en as construit qu'un seul, et que tu passes ton temps à réécrire son contenu, et que tu files ce même tableau à tout le monde.

    Il faut faire un new double[] pour chaque antigène (ou alors, il faut que le constructeur d'antigène se construise son propre tableau et copie le tableau que tu lui passes dans le sien avec System.arrayCopy(). Mais bon, le plus simple et de construire un tableau par boucle.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Août 2007
    Messages : 86
    Par défaut
    merci, ça marche. j'avais pas remarquer qu'il été hors de 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
     
    public EnsembleAg(String cheminFichier, int numAttributs){
    		numAttribut=numAttributs;		 
    		antigenes= new ArrayList<Antigene>();
    		int aClassIndex = 4;		
    		int i=0;
            try {
            	scanner=new Scanner(new File(cheminFichier));        	
            	 double champ;        	 
               	 while (scanner.hasNext()) { 
               		double [] aAttributs = new double[numAttribut];
               		for (int j=0; j<numAttribut; j++){
               	     champ = Double.parseDouble(scanner.next());             	     
               	     aAttributs[j]=champ;           	  
               	 }
               		champ = Double.parseDouble(scanner.next());
               		aClassIndex=(int)champ; 
               		ag=new Antigene(aAttributs,aClassIndex);           		
               		antigenes.add(ag);
               	 }            		
            	 scanner.close();      
     
            } catch (Exception e) {
             e.printStackTrace();
            }
    	}

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

Discussions similaires

  1. Temps de parcours d'une ArrayList
    Par Amnael dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 06/05/2015, 13h15
  2. Problème parcours/recherche arbre-ArrayList
    Par tibet_gang dans le forum Collection et Stream
    Réponses: 0
    Dernier message: 07/02/2011, 10h13
  3. parcour d'un ArrayList
    Par bob3333 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 28/02/2010, 19h01
  4. Problème avec parcours d'une ArrayList et Iterator
    Par Raiden1234 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 30/03/2008, 21h16
  5. [Débutant][ArrayList]parcours et recherche d'objets
    Par codexomega dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 19/02/2006, 18h14

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