Trotz der Veränderung kommt der o.g. Fehler! Die Augabe stammt aus einer alten Klausur. Ich glaube in der Klausur wird einfach davon ausgegangen, das in "db" diverse Buchobjekte enhalten sind.
und was ist wenn die db leer ist und die for-schleife niemals durchlaufen wird. Zudem wird hier nur ein Datensatz geprüft, weil dann, wenn der treffer nicht stimmt, else ausgeführt wird und null zurückgegeben wird.
Die einfachste Lösung wäre hier wohl:
Java:
BuchselectBuch(String isbn){for(Buch b: db){if(b.getISBN().equals(isbn))return b;}returnnull;// <-- Hier das return null einsetzen}
wenn die for-schleife kein Ergebnis zurückliefert, gibt es auch keins => also gib [c]null[/c] zurück
Das wäre nicht nur falsch, sondern auch fatal! Denn dann würde nach dem ersten überprüften Buch sofort null zurückgegeben werden, wenn es nicht das richtige Buch ist! Und das wirst du ja nicht wollen. Daher ist der Vorschlag von Tomate_Salat besser, dass das
Jo danke der Fehler ist jetzt wegg! Eine Frage noch, was denn wenn die Schleife jetzt im 5 Durchgang die ISBN sammt buch findet. Dann bekomme ich über das erste return das Buch zurück. Wird das zweite return jedesmal mit ausgeführt?
nein, mit dem return-statement verlässt du die Methode (ausnahme bildet hier afaik [c]finally[/c], dieser Block wird soweit ich weis dann auch noch ausgeführt und könnte somit glaube das return manipulieren)
Jo danke der Fehler ist jetzt wegg! Eine Frage noch, was denn wenn die Schleife jetzt im 5 Durchgang die ISBN sammt buch findet. Dann bekomme ich über das erste return das Buch zurück. Wird das zweite return jedesmal mit ausgeführt?
Da hast du wohl etwas falsch verstanden. Und zwar generell. Bei einem
Code:
return
springst du komplett aus der Methode, dh du bist nicht nur aus der Schleife, sondern ganz aus der Methode raus und gibst den Wert zurück. Somit wird das, was hinter der Schleife ist, auch nicht mehr ausgeführt. Etwas anderes wäre es mit
Code:
break
oder
Code:
continue
, aber das brauchst du hier absolut nicht. Um deine Frage zu beantworten, nein, es wird nicht aufgerufen, würde ja auch keinen Sinn machen, wenn bei einem Methodenaufruf zweimal ein
nein, mit dem return-statement verlässt du die Methode (ausnahme bildet hier afaik [c]finally[/c], dieser Block wird soweit ich weis dann auch noch ausgeführt und könnte somit glaube das return manipulieren)
Ja, wenn du nen try-catch-Block hast. Aber bei folgendem Beispiel warnt dich Eclipse:
Java:
publicclassTest1{publicstaticvoidmain(String[] args){String t =test();System.out.println(t);}privatestaticStringtest(){try{thrownewException();}catch(Exception e){return"test";}finally{return"finally";}}}