Vector en java

Résolu
amal-these Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   -  
amal-these Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai deux variables :
1. Vector <Vector<double[]>> E = new Vector <Vector<double[]>>();
2. Vector <double[]> B = new Vector <double[]>();

pour remplir le premier (E) je remplis le deuxième (B) pour utiliser cette instruction : E.add(B);

j'utilise B car je peux pas remplir E directement.

Mon problème est le suivant : lorsque je vide B ou je lui affecte autre valeurs, automatiquement E connait les mm changement.

je vous remercie infiniment d'avance.
A voir également:

1 réponse

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Après l'ajout, réinstancies B avec un nouveau "new" pour générer un nouvel objet.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
En effet, c'est la base du système de référence des objets.
B est une référence, l'objet que tu mets dans E est une référence, mais l'objet qu'il y a derrière ces deux références c'est le même, donc la modification de l'objet impacte forcément les deux références.
Il faut donc créer des objets distincts pour éviter les effets de bords.

Remarques :
  • L'usage de Vector est déconseillé, utilises une ArrayList à la place. Voir la JavaDoc de Vector : "(...) it is recommended to use ArrayList in place of Vector"
  • Il est également déconseillé de mélanger les collections (Vector, List, etc.) et les tableaux, puisque les Vector sont déjà des tableaux, pourquoi faire des
    Vector<double[]>
    quand on peut faire un
    Vector<Vector<Double>>
    ...
  • Lors du new il n'est pas nécessaire de rappeler le type de données entre < > ce qui simplifie un peu le code :
    Vector<Vector<double[]>> E = new Vector<>();
0
amal-these Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
Merci infiniment pour votre réponse ça marche très bien.
Suite à votre réponse j'ai deux questions si vous me permettez :
1. Qu'elle est la cause de ce problème?
2. Si je veux conserver le B je peux pas le ré instancier ?

Merci
0
amal-these Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
Je vous remercie infiniment pour ces remarques pertinentes.

S'il vous plait je veux savoir comment je peux initialiser le E de type : Vector<Vector<Double>>, si je passe pas par B et le tableau?

Merci
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Vu ton code plus haut, E ce sera plutôt Vector<Vector<Vector<Double>>> avec trois niveaux comme tu en avais 3 avec Vector<Vector<double[]>>
Même si je te conseilles plutôt d'avoir une List<List<List<Double>>> et de remplacer les Vector par des ArrayList.

Pour bien t'aider est-ce que tu pourrais nous donner un peu plus de code, pour voir comment tu fais actuellement pour remplir ton tableau E avec B ?
0
amal-these Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
merci infiniment pour votre aide.
alors mes données sont stockées dans une matrice A car je lis à partir d'un fichier:
double[][] A= {{1,2,0.3,0.1},
{3,4,1,0.7},
{5,6,0.1,0.2},
{1.5,2.3,0.3,0.1},
{0.5,0.3,0.3,0.1},
{0.5,0.6,0.1,0.2},
{5.1,6,0.2,0.2},
{0.9,0.4,0.7,0.2},
{2.4,3.5,1,0.7},
{3.1,4,1.2,1.8},
{3.1,4,1.2,1.7},
{3.1,4,1.2,1.9},
{3.1,4,1.2,0.8},
{3.2,4.1,1.2,0.8},
{3,5,1.2,0.8}
};
chaque ligne de A représente une donnée.
Je travaille sur la classification alors j'ai codé la partition par une variable E de type Vector <Vector<double[]>> : double[] contient une donnée de A c'est pour cela que j'ai travaillé avec un tableau. Vector<double[]> représente une classe qui est un ensemble de données de A. et Vector <Vector<double[]>> c'est un ensemble de classe.
Alors j'ai pensé comme ça pour programmé une partition qui prend les données d'une matrice.

Si vous voyez autre façon pour les types, merci de me les décrire.

Construction de E :
puisque E.elementAt(0) n'existe pas encore mm si j'ai instancié E, je déclare B de type : Vector<double[]> je la remplie par B.add(A[i]) et puis E.add(B).

j'espère que j'ai bien expliqué. Je vous remercie beaucouuuup pour votre aide.
0