ArrayList mit Iterator

  • Themenstarter Themenstarter javalover
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
J

javalover

Gast
Hi,
Ich habe 2 Klassen Person und Vorlesung:

Person sieht so aus.

Code:
import java.util.ArrayList;

public class Person_Ueb3 {
private String mName ;
Vorlesung_Ueb3 mVorlesung;
ArrayList<Vorlesung_Ueb3> Vorlesungliste = new ArrayList<Vorlesung_Ueb3>() ;

public Person_Ueb3(String name) {
	super();
	mName = name;
}

public void setVorlesung(Vorlesung_Ueb3 vorlesung){
	mVorlesung= vorlesung ;
	vorlesung.mPerson =this;
	Vorlesungliste.add(mVorlesung);
	vorlesung.Personliste.add(this);
}

public String getName() {
	return mName;
}

public void setName(String name) {
	mName = name;
}
public ArrayList<Vorlesung_Ueb3> getVorlesungsliste(){
	return Vorlesungliste;
}
}

Vorlesung sieht so aus :


Code:
import java.util.ArrayList;

public class Vorlesung_Ueb3 {
private String mTitel;
private int mSemester ;
Person_Ueb3 mPerson;
ArrayList<Person_Ueb3> Personliste = new ArrayList<Person_Ueb3>() ;

public Vorlesung_Ueb3(String titel, int semester) {
	super();
	mTitel = titel;
	mSemester = semester;
}
public void setPerson(Person_Ueb3 p){
	mPerson= p ;
	p.mVorlesung = this ;
	Personliste.add(mPerson);
	p.Vorlesungliste.add(this);
}
public String getTitel() {
	return mTitel;
}
public void setTitel(String titel) {
	mTitel = titel;
}
public int getSemester() {
	return mSemester;
}
public void setSemester(int semester) {
	mSemester = semester;
}
public ArrayList<Person_Ueb3> getPersonliste(){
	return Personliste;
}

}



dann geb ich das ganze mit der Treiber klasse aus:


Code:
import java.util.ArrayList;
import java.util.Iterator;

public class Ueb3Treiber {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Vorlesung_Ueb3 vorlesung1	= new Vorlesung_Ueb3("Prog2",1);
		Person_Ueb3 esan			= new Person_Ueb3("Esan");
		Person_Ueb3 oleg			= new Person_Ueb3("Oleg");
		Person_Ueb3 sofia			= new Person_Ueb3("Sofia");
		Person_Ueb3 tom				= new Person_Ueb3("Tom");
		Person_Ueb3 michi			= new Person_Ueb3("Michi");		

//		Iterator<Person_Ueb3> it	= vorlesung1.getPersonliste().iterator();

		vorlesung1.setPerson(esan);
		vorlesung1.setPerson(oleg);
		vorlesung1.setPerson(sofia);
		vorlesung1.setPerson(tom);
		vorlesung1.setPerson(michi);
		System.out.println("Größe soll 5 : "+vorlesung1.getPersonliste().size());
		System.out.println("Titel soll Prog2 : "+vorlesung1.getTitel());
//		System.out.println("Person1 soll Esan : "+vorlesung1.getPersonliste().iterator().next().getName());
		System.out.println("Person1 soll Esan : "+vorlesung1.getPersonliste().listIterator(0).next().getName());
		System.out.println("Person1 soll Oleg : "+vorlesung1.getPersonliste().listIterator(1).next().getName());
//		System.out.println("Person1 soll True : "+it.hasNext());
//		System.out.println("Person1 soll Oleg : "+it.next().getName());
		System.out.println("Esan soll 1 : "+esan.getVorlesungsliste().size());
		System.out.println("Vorlesung soll Prog2 : "+esan.getVorlesungsliste().iterator().next().getTitel());
	}

}


Mein Problem ist die Zeile
System.out.println("Person1 soll Oleg : "+it.next().getName()); wo bei it ist ein Iterator ist. Wenn ich so ausgeben lasse spuckt er mir Fehlermeldungen.

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at Ueb3Treiber.main(Ueb3Treiber.java:29)

Was ist der Unterschied wenn ich
vorlesung1.getPersonliste().listIterator(0).next().getName());
so mache oder mit einem Iterator mache
also so
Iterator<Person_Ueb3> it = vorlesung1.getPersonliste().iterator();
System.out.println("Person1 soll Oleg : "+it.next().getName());

was mache ich falsch ?

dankee
 
> was mache ich falsch ?

du erklärst den Fehler nicht,
selbstverständlich liefert ein Iterator an sich keinen Fehler,
wenn ich den Code bei mir kopiere und die zwei Zeilen

> Iterator<Person_Ueb3> it = vorlesung1.getPersonliste().iterator();
> System.out.println("Person1 soll Oleg : "+it.next().getName());

am Ende einfüge, klappt alles wunderbar,
wieso postest du nicht einfach eine main in der der Fehler auftritt?

------

was anderes wäre es, wenn du erst den Iterator definierst und danach noch was in die Liste einfügst (+ dann auf den Iterator zugreifst),
das widerspricht dem Prinzip des Iterators, damit kommt der nicht klar,
einfach unterlassen,
beim Durchlauf einer Liste generell nicht nebenbei noch was einfügen,
auch bei simplen for-i-Schleifen nich, auch wenn da kein Fehler kommt,
aber bringt den Index durcheinander
 
Hi,
also wenn ich die Zeile
System.out.println("Person1 soll Oleg : "+it.next().getName());

unauskommentiert lasse dann kommt die Fehlermeldung
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at Ueb3Treiber.main(Ueb3Treiber.java:29)


Main klasse ist doch oben siehste nicht?
public class Ueb3Treiber

danke
 
neinnnnnnnnnnn du hast recht es geht das war mein Fehler dass ich zwischen Iterator<Person_Ueb3> it = vorlesung1.getPersonliste().iterator();
und System.out.println("Person1 soll Oleg : "+it.next().getName()); eine Ausgabe mit iterator gemacht habe

dankeee !
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben