da ich removePerson früher in der if-anweisung hatte erhielt ich immer diese exception. die tritt ja angeblich auf weil man nicht während der iterierung elemente löschen kann.
deshalb hab ich das remove nun außerhalb der schleife. natürlich findet er nun thisPerson nichtmehr.
hat jemand eine ahnung wie ich das ganze problem vielleicht überhaupt schöner lösen kann? bin leider anfänger :cry:
1. Lass die Finger von Sprunglabels
2. Du verwendest die foreach Schleife. Intern wird dabei ein iterator verwendet. Da du aber den Iterator nie zu Gesicht bekommst, kannst du auch dessen remove Methode nicht verwenden.
Lösung:
Entferne die foreach Schleife, verwende den Iterator in einer while Schleife und nimm die remove Methode des Iterators
Code:
Iterator it = testlib.getPeople().iterator();
while(it.hasNext())
{
Person thisPerson = (Person)it.next();
if(thisPerson.getName().equalsIgnoreCase(name))
{
it.remove();
}
}
wow! vielen dank für die super schnelle hilfe!
hat super geklappt. frag mich nur, wozu meine testlib Klasse dann die methode removePerson() hat wenn das über den iterator geht, oder hab ich da was falsch verstanden?
Solange man mit dem Iterator iteriert, müssen Änderungen an der Collection über dessen Interface passieren, da der Iterator sonst nichts davon mitbekommt. Verwendest du keinen Iterator, kannst du auch auf andere Art Elemente entfernen.
also das mit dem iterator is schon eine feine sache. das ganze sieht nun so aus:
Code:
else if(choice.equalsIgnoreCase("g")){
System.out.println("Enter person's name: ");
String name = read.readLine();
Iterator it = testlib.getPeople().iterator();
while(it.hasNext()){
Person thisPerson = (Person)it.next();
if(thisPerson.getName().equalsIgnoreCase(name)){
it.remove();
}
}
}
und da hab ich auch schon die nächste anfängerfrage.
meine while schleife sucht nun über den iterator die person deren name eingegeben wurde aus einer arraylist heraus. wenn ich nun bei der eingabe einen namen mitgebe, der nicht in der liste ist passiert garnix, weil ich keine eingabeüberprüfung habe.
wie sieht da eine schöne java lösung aus? über das else zu sagen, dass der eingegebene name nicht vorhanden is kann nix, weil er ja dann solange postet bis er den namen erreicht. macht man das über exceptions?
Da sieht die Java-Lösung so aus, wie die in jeder anderen Sprache. Entscheidend ist höchstens noch die Frage, ob ALLE Personen mit dem angegebenen Namen entfernt werden sollen, oder nur die erste. Aber allgemein eben sowas
Code:
else if(choice.equalsIgnoreCase("g")){
System.out.println("Enter person's name: ");
String name = read.readLine();
Iterator it = testlib.getPeople().iterator();
boolean joDieWarDaDrin = false;
while(it.hasNext()){
Person thisPerson = (Person)it.next();
if(thisPerson.getName().equalsIgnoreCase(name)){
it.remove();
joDieWarDaDrin = true;
}
}
if (!joDieWarDaDrin) System.out.println("War nich drin....");
}
ok. das heißt ich setz einfach eine flag.
ich stell leider immer so blöde fragen weil ich der meinung bin, dass java so viele optionen bietet um sachen zu vereinfachen.
wenn man von den optionen aber nix weiß baut man halt umständlichen code, der viel einfacher erledigt werden könnte.