Archief - Java: Probleem met ListIterator

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

TiZon

Legacy Member
Hey

Ik heb een stukje in mijn DomeinBeheerder die vragen moet aanlever op aanvraag van een (niet verder bepaalde) GUI.

Ik werk als volgt:
Code:
	private Vraag huidigeVraag;
	private List<Vraag> vragen;
	private ListIterator<Vraag> vragenIterator;

....

public Vraag getVorigeVraag() {
		if(vragen == null)
			vragen = getVragen();
		if(vragenIterator == null)
			vragenIterator = vragen.listIterator();
		if(vragenIterator.hasPrevious())
			huidigeVraag = vragenIterator.previous();
		
		return huidigeVraag;
	}
	
	public Vraag getVolgendeVraag() {
		if(vragen == null)
			vragen = getVragen();
		if(vragenIterator == null)
			vragenIterator = vragen.listIterator();
		if(vragenIterator.hasNext())
			huidigeVraag = vragenIterator.next();
		return huidigeVraag;
	}

Nu, als ik altijd de volgende neem, geen probleem. Als ik altijd de vorige neem, geen probleem.

Als ik echter wissel tussen vorige en volgende krijg ik eerst nog 1x het oude object terug.

Voorbeeld:
Code:
public StartUp()
	{
	//	(new HoofdFrame(new DomeinController())).setVisible(true);	
		vraag = new ObservableString();
		vraag.addObserver(this);
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVolgendeVraag().getVraagTekst());
		vraag.setString(DomeinBeheerder.getInstance().getVorigeVraag().getVraagTekst());
		
	}
	
	public void update(Observable o, Object arg){
		System.out.println(vraag.toString());
	}
(deze klasse is een Observer en de String is Observable, vandaar dat de 'update'.

Geeft dit terug:

1. Hoe groot is je huis?
2. Hoeveel mensen wonen er in je huis?
3. Wat eet je thuis?
4. Hoe vaak eet je vlees of vis?
5. Welke brandstof gebruikt je verwarming?
6. Voor welke afsand gebruikt je gezin gemiddeld de auto?
7. Hoe vaak maakt je gezin gebruik van het openbaar vervoer?
8. Waar breng je je vakantie door?
9. Hoe vaak gebruik je zuivel?
10. Let je erg op uw elektriciteitsvebruik?
10. Let je erg op uw elektriciteitsvebruik?
10. Let je erg op uw elektriciteitsvebruik?
10. Let je erg op uw elektriciteitsvebruik?
10. Let je erg op uw elektriciteitsvebruik?


De laatste zou dus terug 9 moeten zijn, maar dat doet het niet...

Iemand een idee?


Alvast Bedankt!


Bart

forloRn_

Legacy Member
Java API to the rescue.

De iterator wijst niet naar een element, maar naar een plaats tussen de elementen.

Als je tien elementen hebt, en je doet tien keer next(), dan wijst hij naar het plaatsje net ná het tiende element. Hij kan niet tussen negen en tien blijven staan, want dan zou next() keer op keer hetzelfde element teruggeven, en dan is je collection zogezegd oneindig lang. Als je erna previous() doet, geeft hij het element net vóór de iterator terug, en dat is weer het laatste, niet het voorlaatste.

TiZon

Legacy Member
Heb het object vergeleken met het vorige nu, als het gelijk is (equals() uitgeschreven voor mijn vraag) neem ik nogmaals de vorige/volgende van de listItt.

Ideaal :-)

Bedankt!
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan