Problème avec Vector

Messages postés
11
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
9 janvier 2010
-
Messages postés
11
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
9 janvier 2010
-
Bonjour,
J'ai un problème avec Vector; en effet je dois ranger mes données dans un Vector sous forme de tableaux de double voici mon programme de test :

import java.util.Random;
import java.util.Vector;

public class Main {

          public static void main(String args[]){
             Vector vet = new Vector();
             String str ="";
             double[] temp = new double[4];
             Random rn = new Random();

             for(int j = 0 ; j < 10; j++){
                 str = "[";
             for (int i = 0 ; i < 4 ; i++){
                 temp[i] = rn.nextDouble();
                 str += " " + temp[i] + " ";
             }
             System.out.println(str);
             vet.addElement(temp);
             }
            System.out.println("apres");
             for(int i = 0 ; i < vet.size(); i++){
                 if(vet.elementAt(i)!=null){
                 temp =  (double[]) vet.elementAt(i);
                 str = "[";
                 for(int j = 0 ; j < temp.length ; j++){
                     str += " " +temp[j] + " ";
                 }
                 System.out.println(str);
             }}
            
          }
       }
Voilà une exécution de ce programme:
[ 0.018375276910338578  0.419658939257196  0.15521296122847417  0.30350794312443397
[ 0.3184121392438253  0.4079730395088288  0.1659825999651794  0.14430268712554617
[ 0.9615814120890731  0.6581146048134904  0.11744589574627418  0.4783004780524981
[ 0.42991658407230904  0.13690699960896824  0.9352533498212319  0.5888668917371855
[ 0.8346153616022116  0.17252120828740536  0.596732662156844  0.8365126053686411
[ 0.4076370216319668  0.4988457278093613  0.8146652922098276  0.8608393910917156
[ 0.1257431247407116  0.2615925221696396  0.7467711027765673  0.2948355767753157
[ 0.7449663721048064  0.8151484743606119  0.0425773724411076  0.608128015154333
[ 0.5049373072139204  0.6909405621148557  0.9739183107420067  0.8256815275287636
[ 0.9001944346114196  0.0760901096059039  0.48613170744433076  0.9045687876734636
apres
[ 0.9001944346114196  0.0760901096059039  0.48613170744433076  0.9045687876734636
[ 0.9001944346114196  0.0760901096059039  0.48613170744433076  0.9045687876734636
[ 0.9001944346114196  0.0760901096059039  0.48613170744433076  0.9045687876734636
[ 0.9001944346114196  0.0760901096059039  0.48613170744433076  0.9045687876734636
[ 0.9001944346114196  0.0760901096059039  0.48613170744433076  0.9045687876734636
[ 0.9001944346114196  0.0760901096059039  0.48613170744433076  0.9045687876734636
[ 0.9001944346114196  0.0760901096059039  0.48613170744433076  0.9045687876734636
[ 0.9001944346114196  0.0760901096059039  0.48613170744433076  0.9045687876734636
[ 0.9001944346114196  0.0760901096059039  0.48613170744433076  0.9045687876734636
[ 0.9001944346114196  0.0760901096059039  0.48613170744433076  0.9045687876734636

Vous remarquez que le dernier tableau "ecrase" les ajouts précédents.
Merci s'il y'a qlq1 ayant une sol pour mon problème de me répondre

Humanite to oders, Tayri taghofi a wanna righ yiriyi, Je suis ce que je suis grâce à ce que nous sommes tous

2 réponses

Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Le problème c'est que "temp" est un objet. En java il faut distinguer les objets et les types primitifs. A l'inverse des types primitifs, les objets ne sont pas dupliqués (c'est à la fois très pratique et très performant). Du coup si tu écris Object a = b, et que tu modifies b, a sera modifié aussi. Car ils sont liés par référence, un peu comme les pointeurs en C. Si tu veux 10 tableaux indépendants dans ton vecteur, il faut que tu crées effectivement 10 tableaux donc il suffit de mettre le double[] temp = new double[4]; à l'intérieur de ta boucle.

En plus il est préférable d'utiliser la généricité <double[]> arrivée avec Java 1.5

Exemple :
<hr size ="2" width= "100%" />
import java.util.Random;
import java.util.Vector;

public class Main {

    public static void main(String args[]) {
        Vector<double[]> vet = new Vector<double[]>();
        String str = "";

        Random rn = new Random();

        for (int j = 0; j < 10; j++) {
            double[] temp = new double[4];
            str = "[";
            for (int i = 0; i < 4; i++) {
                temp[i] = rn.nextDouble();
                str += " " + temp[i] + " ";
            }
            System.out.println(str);
            vet.addElement(temp);
        }
        System.out.println("apres");
        double[] temp = new double[4];
        for (int i = 0; i < vet.size(); i++) {
            if (vet.elementAt(i) != null) {
                temp = vet.elementAt(i);
                str = "[";
                for (int j = 0; j < temp.length; j++) {
                    str += " " + temp[j] + " ";
                }
                System.out.println(str);
            }
        }

    }
}
Messages postés
11
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
9 janvier 2010

C parfait merci pour la réponse.

Humanite to oders, Tayri taghofi a wanna righ yiriyi, Je suis ce que je suis grâce à ce que nous sommes tous