Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Iterator (Question newbie)

19 réponses
Avatar
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

9 réponses

1 2
Avatar
Patrick Gras
Bonjour,

en fait ton problème de cast vient de ce que tu essaye de caster un iterator
en vector,
(iterator est un ... Iterator... et iterator.next() un Object que tu peux
caster...

je pense que ce que tu cherche à faire est : (String)((Vector)
iterator.next()).get(1)

-Patrick

"Bernard Koninckx" wrote in message
news:4083dae4$0$988$
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" a écrit dans le message de news:
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" a écrit dans le message de news:
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








Avatar
Bernard Koninckx
Et comment fais-tu dès lors pour accéder aux données ? Dois-tu faire un
ArrayList de ArrayList ?

Bernard


"Laurent Bossavit" a écrit dans le message de
news:
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/



Avatar
jerome moliere
Bernard Koninckx wrote:

Et comment fais-tu dès lors pour accéder aux données ? Dois-tu faire un
ArrayList de ArrayList ?
je pense que soit ta formulation est maladroite soit tu ne prends pas le

temps de reflechir au xreponses données...
comme l'a fort justement signalé maitre es XP alias Mister Bossavit,
tu peux rendre ton code plus clair et plus logique surement si au lieu
d'avoir dan sta collection (quelle qu'elle soit List ou vector) des
String puis des int wrappés des instances d'une classes à toi wrappant
ces données...
ainsi si ton int c'est un age d'une personne et ta string un nom
tu te fais une classe Personne avec 2 attributs age et nom et 2
accesseurs (getName et getAge) et tu remplis ton vecteur ou ta liste
avec des instances de cette classes, le remplissagee et la lecture
seront simples...

jerome

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

Avatar
Bernard Koninckx
Je pense par contre que ma question est parfaitement justifiée. La plupart
des fonctions a surcharger ou a redéfinir utilisent des attributs Rows et
Columns ...

!!!!????!!!!

Bernard


"jerome moliere" a écrit dans le message de news:
c668fe$6st$
Bernard Koninckx wrote:

Et comment fais-tu dès lors pour accéder aux données ? Dois-tu faire un
ArrayList de ArrayList ?
je pense que soit ta formulation est maladroite soit tu ne prends pas le

temps de reflechir au xreponses données...
comme l'a fort justement signalé maitre es XP alias Mister Bossavit,
tu peux rendre ton code plus clair et plus logique surement si au lieu
d'avoir dan sta collection (quelle qu'elle soit List ou vector) des
String puis des int wrappés des instances d'une classes à toi wrappant
ces données...
ainsi si ton int c'est un age d'une personne et ta string un nom
tu te fais une classe Personne avec 2 attributs age et nom et 2
accesseurs (getName et getAge) et tu remplis ton vecteur ou ta liste
avec des instances de cette classes, le remplissagee et la lecture
seront simples...

jerome

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

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

2212111941


Avatar
Bernard Koninckx
Encore une chose ...
La plupart des bouquins ou resources web illustrent la programmation des
JTables avec des vecteurs de vecteurs ou des arraylist de arraylist.

Bernard

"jerome moliere" a écrit dans le message de news:
c668fe$6st$
Bernard Koninckx wrote:

Et comment fais-tu dès lors pour accéder aux données ? Dois-tu faire un
ArrayList de ArrayList ?
je pense que soit ta formulation est maladroite soit tu ne prends pas le

temps de reflechir au xreponses données...
comme l'a fort justement signalé maitre es XP alias Mister Bossavit,
tu peux rendre ton code plus clair et plus logique surement si au lieu
d'avoir dan sta collection (quelle qu'elle soit List ou vector) des
String puis des int wrappés des instances d'une classes à toi wrappant
ces données...
ainsi si ton int c'est un age d'une personne et ta string un nom
tu te fais une classe Personne avec 2 attributs age et nom et 2
accesseurs (getName et getAge) et tu remplis ton vecteur ou ta liste
avec des instances de cette classes, le remplissagee et la lecture
seront simples...

jerome

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

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

2212111941


Avatar
captainpaf
"Bernard Koninckx" a écrit dans le message de
news: 4086ad0e$0$10939$
Encore une chose ...
La plupart des bouquins ou resources web illustrent la programmation des
JTables avec des vecteurs de vecteurs ou des arraylist de arraylist.

Bernard

"jerome moliere" a écrit dans le message de news:
c668fe$6st$
Bernard Koninckx wrote:

Et comment fais-tu dès lors pour accéder aux données ? Dois-tu faire
un



ArrayList de ArrayList ?
je pense que soit ta formulation est maladroite soit tu ne prends pas le

temps de reflechir au xreponses données...
comme l'a fort justement signalé maitre es XP alias Mister Bossavit,
tu peux rendre ton code plus clair et plus logique surement si au lieu
d'avoir dan sta collection (quelle qu'elle soit List ou vector) des
String puis des int wrappés des instances d'une classes à toi wrappant
ces données...
ainsi si ton int c'est un age d'une personne et ta string un nom
tu te fais une classe Personne avec 2 attributs age et nom et 2
accesseurs (getName et getAge) et tu remplis ton vecteur ou ta liste
avec des instances de cette classes, le remplissagee et la lecture
seront simples...

jerome

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



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

2212111941


Salut,


Je crois que tu te perds un peu dans les méandres de la 4ème dimension :).
Tu n'avais jamais parlé de JTable avant. Comment veux tu qu'on t'aide si on
sait même pas ce que tu veux faire exactement ? (en français pas avec des
vecteurs ou des jtables ;) ) Il y a peut être une solution plus simple à
laquelle tu n'as pas pensé.
Parce qu'au départ je te rappelle que ta question c'était simplement
pourquoi j'ai un invalid cast comme erreur ?! Et à cette question on t'a
largement (trop?) répondu.



Avatar
jocelyn
Salut tlm,

Il me semble en fait que Bernard avait lance un autre thread qui parlait de
ses problemes avec la JTable, et je lui avais signale
la solution consistant à définir une sous classe de TableModel répondant à
ses besoins, tout en signalant qu'effectivement cela
représente un investissement en temps au depart du projet. Visiblement
Bernard, tu préfères t'en tenir à la solution 'de base'
fournie par Sun. C'est ton choix :)
Dans ce cas de figures, tu travailleras donc exclusivement avec un Vector de
Vector (oublie les ArrayList, la JTable ne les prends pas
en compte que je sache) et donc effectivement ce sont les premieres
solutions proposées qui te conviennent. Pour reprendre, admettons
que tu veuilles afficher une liste de n personnes qui ont disons un numéro
d'ordre et un nom.
Tu auras donc un Vector de N elements, chaque element etant un Vector de 2
elements: un Integer representant le numéro d'ordre, et
un String representant le nom.
Si tu constitues bien ce vecteur de vecteurs et que tu le transmets au
constructeur de la JTable, ca devrait s'afficher correctement.

Vector vdata = new Vector(n);
Vector p = new Vector(2);
p.add(new Integer(1));
p.add("Bernard");
vdata.add(p);
p.clear();
p.add(new Integer(2));
p.add("Jocelyn");
vdata.add(p); etc...

Attention ce n'est qu'à titre explicatif, ce code est un peu pourri :)

Maintenant si tu désires pour une raison x acceder toi meme aux valeurs, ce
qui correspond à ta question initiale:

Iterator i = vdata.iterator();
while (i.hasNext()){
Vector personne = (Vector)i.next();
Integer numero = (Integer)personne.get(0);
String nom = (String)personne.get(1);
.....
}
Memes remarques concernant la qualite du code....

Je maintiens que l'utilisation de cette solution n'est à recommander que
dans 2 cas:
- utilisation en amateur chez soi pepere
- table vraiment tres simples et qui ne risquent pas de changer par la suite
En effet le code est evidemment tres lourd, tres sujet à erreur, =>
difficile à maintenir !

++

--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même
Avatar
Bernard Koninckx
Merci Jocelyn,

Après avoir lu toutes vos réponses, je préfère passer par l'utilisation d'un
ArrayList et travailler avec l'héritage d'AbstractTable. J'ai d'ailleurs
initialisé un nouveau post avec quelques questions que je me pose à ce
sujet.

Bernard


"jocelyn" a écrit dans le message de news:
c67tbt$hcn$
Salut tlm,

Il me semble en fait que Bernard avait lance un autre thread qui parlait
de

ses problemes avec la JTable, et je lui avais signale
la solution consistant à définir une sous classe de TableModel répondant à
ses besoins, tout en signalant qu'effectivement cela
représente un investissement en temps au depart du projet. Visiblement
Bernard, tu préfères t'en tenir à la solution 'de base'
fournie par Sun. C'est ton choix :)
Dans ce cas de figures, tu travailleras donc exclusivement avec un Vector
de

Vector (oublie les ArrayList, la JTable ne les prends pas
en compte que je sache) et donc effectivement ce sont les premieres
solutions proposées qui te conviennent. Pour reprendre, admettons
que tu veuilles afficher une liste de n personnes qui ont disons un numéro
d'ordre et un nom.
Tu auras donc un Vector de N elements, chaque element etant un Vector de 2
elements: un Integer representant le numéro d'ordre, et
un String representant le nom.
Si tu constitues bien ce vecteur de vecteurs et que tu le transmets au
constructeur de la JTable, ca devrait s'afficher correctement.

Vector vdata = new Vector(n);
Vector p = new Vector(2);
p.add(new Integer(1));
p.add("Bernard");
vdata.add(p);
p.clear();
p.add(new Integer(2));
p.add("Jocelyn");
vdata.add(p); etc...

Attention ce n'est qu'à titre explicatif, ce code est un peu pourri :)

Maintenant si tu désires pour une raison x acceder toi meme aux valeurs,
ce

qui correspond à ta question initiale:

Iterator i = vdata.iterator();
while (i.hasNext()){
Vector personne = (Vector)i.next();
Integer numero = (Integer)personne.get(0);
String nom = (String)personne.get(1);
.....
}
Memes remarques concernant la qualite du code....

Je maintiens que l'utilisation de cette solution n'est à recommander que
dans 2 cas:
- utilisation en amateur chez soi pepere
- table vraiment tres simples et qui ne risquent pas de changer par la
suite

En effet le code est evidemment tres lourd, tres sujet à erreur, =>
difficile à maintenir !

++

--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à
ne

pas devenir un monstre lui-même




Avatar
captainpaf
Désolé, je n'avais pas lu ce message. Tout ceci me paraissait donc bien
incompréhensible. Un rappel du sujet précédent aurait été le bienvenue.
1 2