ich habe eine Frage bezüglich eines Programmierbeispiel im Rahmen meines Fernstudiums. Gegeben ist folgender Beispieltext
Java:
publicvoidbereinigeAlleKunden(Collection<Kunde> c){Kunde k =null;for(Iterator<Kunde> it = c.iterator(); it.hasNext(); k = it.next()){if(!k.getGeschlecht().equals("")){
it.remove();}}}
Meine Frage: Wieso ist in der If-Schleife vor k.getGeschlecht ein Ausrufezeichen? Normalerweise bedeutet das doch eine Negation, was in diesem Zusammenhang keinen Sinn machen würde... Oder stehe ich auf dem Schlauch?
k.getGeschlecht().equals("") --> Wenn das Geschlecht ein leerer String ist
!k.getGeschlecht().equals("") --> Wenn das Geschlecht KEIN leerer String ist
publicvoidbereinigeAlleKunden(Collection<Kunde> c){for(Iterator<Kunde> it = c.iterator(); it.hasNext();){Kunde k = it.next();if(k.getGeschlecht().isEmpty()){
it.remove();}}}
Der erste Kunde wird übersprungen, da der letzte Teil einer for-Schleife immer am Ende einer Iteration ausgeführt wird.
Aber das macht doch dann keinen Sinn, oder? Das würde ja bedeuten, dass wenn das Geschlecht leer ist, das Objekt gelöscht wird, oder liege ich da falsch. Eigentlich würde bei einer Bereinigung ja eher Sinn machen, das Objekt zu löschen wenn das Geschlecht leer ist und das ist das was mich verwirrt...
Liegt es alles nur am Wetter, ich versuchs auch mal: eigentlich sollte doch gleich im ersten Durchlauf eine NullPointerException kommen weil k dann null ist oder ?
Wie denn nun ? bei @Flown wird gelöscht wenn das Geschlecht leer ist, in deinem Beispielcode wurde gelöscht wenn das Geschlecht nicht leer ist. Was soll denn passieren ?
Liegt es alles nur am Wetter, ich versuchs auch mal: eigentlich sollte doch gleich im ersten Durchlauf eine NullPointerException kommen weil k dann null ist oder ?
Wie denn nun ? bei @Flown wird gelöscht wenn das Geschlecht leer ist, in deinem Beispielcode wurde gelöscht wenn das Geschlecht nicht leer ist. Was soll denn passieren ?
Keine Ahnung, das erwäht der TE nicht. Sinnvoller wäre es, Kunden ohne Geschlecht (wobei heutzutage wer weiß^^) zu löschen, als Kunden mit Geschlecht. Im Originalcode werden aber alle Kunden mit Geschlecht gelöscht.
Hängt ihr euch jetzt wirklich alle auf, ob eine Bedingung verneint wird oder nicht? Ich wollte eigentlich zeigen, wie man das aktuelle Element aus dem Iterator erhält und wie man es verarbeitet.
Nein ist mir vollkommen egal, ich wollte es nur für den TE erklären bzw. wissen was er will.
Eine Frage hätte ich auch noch an den TE, @mdey86: Ist dieser Code der eine NPE wirft tatsächlich von deiner Fernuni gegeben? Falls ja, auweh wer unterrichtet denn da bitte?^^