Iterator (Question newbie)

Le
Bernard Koninckx
Bonjour à tous,

Je travaille actuellement avec un vecteur et dois retrouver certaines
informations à l'intérieur de ce vecteur. J'utilise un Iterator. Mais en
l'utilisant, j'ai systématiquement une erreur de cast de type objet.
Voilà ce que j'ai tappé:

String label = (String)((Vector)iterator).get(1);

ou

Iterator est Iterator iterator = monVecteur.iterator();

Est ce correct ?
Y a-t-il plus simple ?

Je suis à l'écoute de toutes vos remarques et suggestions.

Merci à ytous pour votre aide.

Bernard
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
jerome moliere
Le #635067
Bernard Koninckx wrote:

Bonjour à tous,

Je travaille actuellement avec un vecteur et dois retrouver certaines
informations à l'intérieur de ce vecteur. J'utilise un Iterator. Mais en
l'utilisant, j'ai systématiquement une erreur de cast de type objet.
Voilà ce que j'ai tappé:

String label = (String)((Vector)iterator).get(1);

ou

Iterator est Iterator iterator = monVecteur.iterator();


a priori si le compilateur ou si le runtime gueule c'est que ce n'est
pas bon :)
l'interet d'un iterateur est justement d'utiliser toujours le même type
de structure et de code pour traverser une collection et ce qq qu'elle
soit..

donc du devrais plutot avoir un code du type
for(Iterator iter=monvecteur.iterator();iter.hasNext();){
Object obj = iter.next();
// fais qqch de l'objet contenu
}

Jerome
--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941

Bernard Koninckx
Le #635066
Merci,

le problème c'est qu'il s'agit d'un Vecteur de Vecteur contenant une suite
de record "int et String"

Comment puis-je faire alors ?

Bernard

"jerome moliere" c60j20$9a9$
Bernard Koninckx wrote:

Bonjour à tous,

Je travaille actuellement avec un vecteur et dois retrouver certaines
informations à l'intérieur de ce vecteur. J'utilise un Iterator. Mais en
l'utilisant, j'ai systématiquement une erreur de cast de type objet.
Voilà ce que j'ai tappé:

String label = (String)((Vector)iterator).get(1);

ou

Iterator est Iterator iterator = monVecteur.iterator();


a priori si le compilateur ou si le runtime gueule c'est que ce n'est
pas bon :)
l'interet d'un iterateur est justement d'utiliser toujours le même type
de structure et de code pour traverser une collection et ce qq qu'elle
soit..

donc du devrais plutot avoir un code du type
for(Iterator iter=monvecteur.iterator();iter.hasNext();){
Object obj = iter.next();
// fais qqch de l'objet contenu
}

Jerome
--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003

http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—8

2212111941


jerome moliere
Le #634803
Bernard Koninckx wrote:
Merci,

le problème c'est qu'il s'agit d'un Vecteur de Vecteur contenant une suite
de record "int et String"

Comment puis-je faire alors ?



for(Iterator iter=monvecteur.iterator();iter.hasNext();){
Vector v = (Vector)iter.next();
// fais qqch de l'objet contenu
// du genre iterer dessus
for(Iterator iter2=v.iterator();iter2.hasNext();){
//?????????????
}
}
Bernard

"jerome moliere" c60j20$9a9$

Bernard Koninckx wrote:


Bonjour à tous,

Je travaille actuellement avec un vecteur et dois retrouver certaines
informations à l'intérieur de ce vecteur. J'utilise un Iterator. Mais en
l'utilisant, j'ai systématiquement une erreur de cast de type objet.
Voilà ce que j'ai tappé:

String label = (String)((Vector)iterator).get(1);

ou

Iterator est Iterator iterator = monVecteur.iterator();


a priori si le compilateur ou si le runtime gueule c'est que ce n'est
pas bon :)
l'interet d'un iterateur est justement d'utiliser toujours le même type
de structure et de code pour traverser une collection et ce qq qu'elle
soit..

donc du devrais plutot avoir un code du type
for(Iterator iter=monvecteur.iterator();iter.hasNext();){
Object obj = iter.next();
// fais qqch de l'objet contenu
}



--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941



captainpaf
Le #634802
"Bernard Koninckx" news: 4083cd70$0$420$
Bonjour à tous,

Je travaille actuellement avec un vecteur et dois retrouver certaines
informations à l'intérieur de ce vecteur. J'utilise un Iterator. Mais en
l'utilisant, j'ai systématiquement une erreur de cast de type objet.
Voilà ce que j'ai tappé:

String label = (String)((Vector)iterator).get(1);

ou

Iterator est Iterator iterator = monVecteur.iterator();

Est ce correct ?
Y a-t-il plus simple ?

Je suis à l'écoute de toutes vos remarques et suggestions.

Merci à ytous pour votre aide.

Bernard


Salut,

non ce n'est pas correct. içi :
String label = (String)((Vector)iterator).get(1);
tu tentes de caster un objet de la class Iterator en un object de la class
Vector. Et bien sûr tu ne peux pas le faire.
Un cast est valable lorsqu'il correspond à la même classe que l'objet ou à
une de ses super class ou enfin à une interface implementée par l'objet.
De plus, soit tu utilises l'iterator d'un vector pour le parcourir ou soit
tu utilises le vector lui même mais pas un obscur mélange des 2.
Par exemple
<code>
/* parcour en utilisant le vector */
for(int i=0;i<vector.size();i++)
{
LaClassDeMonObject monObject = (LaClassDeMonObject)vector.get(i);
}
</code>
jérôme t'as indiqué comment utiliser le parcour avec l'iterator.
Au fait, pourquoi utilises tu un Vector ? Tu dois synchroniser tes ajouts ?
Si la réponse est non, utilises plutôt une ArrayList qui fera le même boulot
mais de façon beaucoup moins gourmande.
bon courage.

jerome moliere
Le #634801
Bernard Koninckx wrote:
Et comment je récupère mon entier et mon String ?
t'abuses pas un peu là ?

je t'ai donné le code t'as qu'a faire un get qui va bien dans la
deuxieme iteration il ne faut pas exagerer non plus!!!
je ne suis pas darty ni le Ng non plus d'ailleurs...
on veut bien t'aider a comprendre, te donner des exemples mais pas faire
ton taff !!!

Jerome
--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941

jerome moliere
Le #634800
Bernard Koninckx wrote:

Merci quand même pour l'explication

Mes données sont dans une JTable et doivent être synchronisées


tu n'as donc qu'un thread qui les attaque ? a moins que t'ai colle des
workers de partout ?
de toute façon je pense pas que la meilleure solution soit d'utiliser
une telle structure mais a toi de voir, d'autant plus que la
synchronisation d'un vector ou d'une hashtable n'est que de la poudre
aux yeux mais bon...
il faut mieux s'assurer soi même de la correcte synchronisation des
données..

Jerome


--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003
http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—82212111941

Bernard Koninckx
Le #634799
Merci quand même pour l'explication

Mes données sont dans une JTable et doivent être synchronisées

Bernard

"captainpaf" c60ld2$a1n$

"Bernard Koninckx" news: 4083cd70$0$420$
Bonjour à tous,

Je travaille actuellement avec un vecteur et dois retrouver certaines
informations à l'intérieur de ce vecteur. J'utilise un Iterator. Mais en
l'utilisant, j'ai systématiquement une erreur de cast de type objet.
Voilà ce que j'ai tappé:

String label = (String)((Vector)iterator).get(1);

ou

Iterator est Iterator iterator = monVecteur.iterator();

Est ce correct ?
Y a-t-il plus simple ?

Je suis à l'écoute de toutes vos remarques et suggestions.

Merci à ytous pour votre aide.

Bernard


Salut,

non ce n'est pas correct. içi :
String label = (String)((Vector)iterator).get(1);
tu tentes de caster un objet de la class Iterator en un object de la class
Vector. Et bien sûr tu ne peux pas le faire.
Un cast est valable lorsqu'il correspond à la même classe que l'objet ou à
une de ses super class ou enfin à une interface implementée par l'objet.
De plus, soit tu utilises l'iterator d'un vector pour le parcourir ou soit
tu utilises le vector lui même mais pas un obscur mélange des 2.
Par exemple
<code>
/* parcour en utilisant le vector */
for(int i=0;i<vector.size();i++)
{
LaClassDeMonObject monObject = (LaClassDeMonObject)vector.get(i);
}
</code>
jérôme t'as indiqué comment utiliser le parcour avec l'iterator.
Au fait, pourquoi utilises tu un Vector ? Tu dois synchroniser tes ajouts
?

Si la réponse est non, utilises plutôt une ArrayList qui fera le même
boulot

mais de façon beaucoup moins gourmande.
bon courage.





Bernard Koninckx
Le #634797
Et comment je récupère mon entier et mon String ?
En fait je pense que c'est la que je m'y perds.
Je parcourais mon Vecteur dans une boucle while
while (iterator.hasNext()){
String label = (String)((Vector)iterator).get(1); // pour récupérer ma
chaîne de caractère. Ca fonctionne pas

iterator.next();
}
"jerome moliere" c60lbs$alr$
Bernard Koninckx wrote:
Merci,

le problème c'est qu'il s'agit d'un Vecteur de Vecteur contenant une
suite


de record "int et String"

Comment puis-je faire alors ?



for(Iterator iter=monvecteur.iterator();iter.hasNext();){
Vector v = (Vector)iter.next();
// fais qqch de l'objet contenu
// du genre iterer dessus
for(Iterator iter2=v.iterator();iter2.hasNext();){
//?????????????
}
}
Bernard

"jerome moliere" c60j20$9a9$

Bernard Koninckx wrote:


Bonjour à tous,

Je travaille actuellement avec un vecteur et dois retrouver certaines
informations à l'intérieur de ce vecteur. J'utilise un Iterator. Mais
en




l'utilisant, j'ai systématiquement une erreur de cast de type objet.
Voilà ce que j'ai tappé:

String label = (String)((Vector)iterator).get(1);

ou

Iterator est Iterator iterator = monVecteur.iterator();


a priori si le compilateur ou si le runtime gueule c'est que ce n'est
pas bon :)
l'interet d'un iterateur est justement d'utiliser toujours le même type
de structure et de code pour traverser une collection et ce qq qu'elle
soit..

donc du devrais plutot avoir un code du type
for(Iterator iter=monvecteur.iterator();iter.hasNext();){
Object obj = iter.next();
// fais qqch de l'objet contenu
}



--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003

http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—8

2212111941




Bernard Koninckx
Le #634796
Désolé ...

Je crois que mon erreur était de penser que l'itérateur me retournait la
valeur rechecrhée en question. Si j'ai bien compris , elle ne fait que
passer un "pointeur" sur l'élément suivant.

Maintenant c'est clair.

Inutile d'être agressif. Je n'ai peut-être pas été suffisament explicite
dans ma requête et m'en excuse. Ce n'est pas mon style de demander à
quelqu'un d'autre de faire mon travail. Mais là j'avais vraiment rien
compris à l'utilité des Iterator.

Encore désolé.

Bernard

"jerome moliere" c60m1b$b28$
Bernard Koninckx wrote:
Et comment je récupère mon entier et mon String ?
t'abuses pas un peu là ?

je t'ai donné le code t'as qu'a faire un get qui va bien dans la
deuxieme iteration il ne faut pas exagerer non plus!!!
je ne suis pas darty ni le Ng non plus d'ailleurs...
on veut bien t'aider a comprendre, te donner des exemples mais pas faire
ton taff !!!

Jerome
--
Auteur cahier du programmeur Java tome 2 - Eyrolles 10/2003

http://www.eyrolles.com/php.informatique/Ouvrages/ouvrage.php3?ouv_ean13—8

2212111941


Laurent Bossavit
Le #634508
Bernard:

Et comment je récupère mon entier et mon String ?
En fait je pense que c'est la que je m'y perds.


Si tu as un "int" et une "String" qui vont tout le temps ensemble, fais-
en une classe, et mets des instances de cette classe dans ton Vector. Ca
te simplifiera la vie.

Laurent
http://bossavit.com/

Publicité
Poster une réponse
Anonyme