[java] Vector doorzoeken via listIterator

Pagina: 1
Acties:

  • spone
  • Registratie: Mei 2002
  • Niet online
Ik heb de volgende snippet:

Java:
1
2
3
4
for(ListIterator i = leerlingVector.listIterator(); i.hasNext(); ){
System.out.println(i.next().toString());
System.out.println(i.next().geefNaam());
}


Wanneer ik nu bovenstaande code uitvoer, werkt het wél wanneer ik toString() aanroep (ie de goede code wordt uitgevoerd met bijbehorende output), maar wanneer ik geefNaam() aanroep kent ie em niet: cannot cannot find symbol - symbol : method geefNaam()

Terwijl zowel de method toString bestaat als geefNaam in die klasse, beide zijn de public. Het gaat dus eigenlijk om een vector met daarin allerlei objecten van de klasse Leerling. Vervolgens ga ik dan alle objecten in die vector af, om hun naam op te vragen en te vergelijken via .equals (maar dat is geen probleem verder :))

Iemand een ideetje wat ik fout doe?

Heb al gezocht op got en google, maar veel bruikbaars vind ik niet... :X

[ Voor 8% gewijzigd door spone op 14-03-2005 15:43 ]

Game: i5-14600K, 32GB DDR5-6000, RTX 5070 Ti; Laptop: MacBook Pro M1 Pro 14" 16/512; Server: R9-7950X, 96GB DDR5-5600; Woonkamer: Mac Mini M4 16/256


  • Apie!
  • Registratie: Januari 2000
  • Laatst online: 09-03 19:55

Apie!

Newer, better & confusinger

Moet je niet casten naar het object wat er in de Vector zit?
Java:
1
2
3
4
5
6
Leerling leerling = null;
for(ListIterator i = leerlingVector.listIterator(); i.hasNext(); ){
    leerling = (Leerling)i.next();
    System.out.println(leerling.toString());
    System.out.println(leerling.geefNaam());
}

[ Voor 68% gewijzigd door Apie! op 14-03-2005 15:28 ]

My lungs taste the air of Time
Blown past falling sands


  • spone
  • Registratie: Mei 2002
  • Niet online
Thanks, dit werkt wel ja :) _/-\o_

Nou vraag ik me toch nog steeds af waarom de toString() methode het wél doet, en de rest niet, terwijl de toString gewoon overridden is... :o

[ Voor 73% gewijzigd door spone op 14-03-2005 15:31 ]

Game: i5-14600K, 32GB DDR5-6000, RTX 5070 Ti; Laptop: MacBook Pro M1 Pro 14" 16/512; Server: R9-7950X, 96GB DDR5-5600; Woonkamer: Mac Mini M4 16/256


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 30-04 09:28

Macros

I'm watching...

toString() is een methode van Object, all Objecten hebben dus die methode, ook jouw objecten. Bij de iterator krijg je altijd een Object, wat nu toevallig een Leerling object is, maar dat weet hij niet, er kan vanalles inzitten. Dus je moet het eerst casten naar Leerling.

Check ook de haakjes:
Java:
1
System.out.println( ((Leerling)i.next()).geefNaam() ); 

[ Voor 17% gewijzigd door Macros op 14-03-2005 15:31 ]

"Beauty is the ultimate defence against complexity." David Gelernter


  • Apie!
  • Registratie: Januari 2000
  • Laatst online: 09-03 19:55

Apie!

Newer, better & confusinger

Je cast het object uit de Vector ook niet naar Leerling, maar je probeert i.next().geefNaam() te casten naar Leerling.
jij doet:
code:
1
System.out.println((Leerling)i.next().geefNaam());


je moet doen:
code:
1
System.out.println(((Leerling)i.next()).geefNaam());


maar aangezien dat onleesbaar wordt doe ik het meestal opsplitsen in aparte regels zoals ik hierboven al liet zien.

My lungs taste the air of Time
Blown past falling sands


  • DaCoTa
  • Registratie: April 2002
  • Laatst online: 19:38
Twee dingen. Ten eerste: uit de next() methode komt iets van de klasse Object. Die kent dus geen geefNaam(). Je moet eerst expliciet casten naar het object wat die functie wel heeft. Ten tweede: je roept in je lus twee maal de next() methode aan. Iedere call naar next() itereert een object verder, deze constructie werkt alleen als je een collection hebt waarin paarsgewijst twee objecten in staan, maar dat lijkt me hier toch niet het geval? Je moet, los van de twee printstatements, met next() een object uit de iterator pakken, casten en in een lokale variabele stoppen. Op deze manier kun je binnen de loop er alles mee doen wat je wil, inclusief alle methods aanroepen die dat object kent.
edit:
Spuit 11

  • spone
  • Registratie: Mei 2002
  • Niet online
...en dan te bedenken dat ik de hele tijd niet snapte waarom het niet werkte :D

Game: i5-14600K, 32GB DDR5-6000, RTX 5070 Ti; Laptop: MacBook Pro M1 Pro 14" 16/512; Server: R9-7950X, 96GB DDR5-5600; Woonkamer: Mac Mini M4 16/256


  • Apie!
  • Registratie: Januari 2000
  • Laatst online: 09-03 19:55

Apie!

Newer, better & confusinger

Tja, Je probeert 4 dingen op 1 regel te doen en daarom zei ik ook maar dat je beter stap voor stap kan coden en niet te veel statements op 1 regel te proppen :) Dan snap je het misschien niet 1-2-3, maar dan is het in ieder geval nog leesbaar B)

My lungs taste the air of Time
Blown past falling sands

Pagina: 1