Vector en java
Résolu
amal-these
Messages postés
26
Statut
Membre
-
amal-these Messages postés 26 Statut Membre -
amal-these Messages postés 26 Statut Membre -
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.
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.
1 réponse
-
Après l'ajout, réinstancies B avec un nouveau "new" pour générer un nouvel objet.
-
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 unVector<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<>();
-
-
-
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 ? -
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.
-