Problème avec Vector

awall2954 Messages postés 11 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 9 janvier 2010 - 30 avril 2008 à 01:09
awall2954 Messages postés 11 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 9 janvier 2010 - 30 avril 2008 à 22:54
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

cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
30 avril 2008 à 09:27
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);
            }
        }

    }
}
0
awall2954 Messages postés 11 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 9 janvier 2010 1
30 avril 2008 à 22:54
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
0
Rejoignez-nous