Rückgabewert der if-Anweisung in einer for each-Schleife
Habe ich diese Methode, die verwendet eine for-each-Schleife mit einer if-Anweisung, in der es
public static Apartment getApartment(String aNumber)
//for loop to iterate through the list of apartments
{
for (Apartment x : listOfApartments)
{
//Variable to hold the value of returned apartment
if (x.getApartmentNo().equalsIgnoreCase(aNumber))
{ Apartment chosen = x;
}
else
{JOptionPane.showMessageDialog(null, "Apartment not found");
}
}
return chosen;
}
Ich erhalte eine Fehlermeldung, dass das Symbol gewählt haben, nicht gefunden. Ich glaube, ich habe deklariert die variable in der falschen Stelle.
Keine Hilfe?
Hinweis: Dies ist eine Methode, die einen String und gibt ein Objekt zurück Wohnung.
InformationsquelleAutor Sasha | 2012-04-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Akzeptierte Antwort ist richtig, aber ich würde stark vorschlagen, um zu vermeiden, mehrere return-Anweisungen. Code mit mehreren Rückgabe-Anweisungen ist schwieriger zu verwalten. Mag nicht wie eine große Sache, aber wenn der code wächst, kann dies zu einem echten Problem.
break
undif(result==null)
nach der Schleife) verletzt Lesbarkeit dieses Stück code. Zwar ist dies sicherlich eine legitime Praxis für größere Teile des Codes, kürzere Stücke wie diese können profitieren von mehreren gibt. Es gibt keine one-size-fits-all-Regel auf dieses; es ist am besten Ansatz, das problem von Fall zu Fall.Ich bin nicht einverstanden. Es sei denn, Sie und Ihr team sind von mystischen perfekte Entwickler Rasse haben, dann ist dies war in der Regel passiert: dev0 erstellt eine Funktion mit mehreren returns (nicht durch Reifen springen). Dann irgendwann dev1 erweitert und fügt ein paar mehr retuns. dev1 ist nicht überarbeiten Sie den code, weil Alter code Werke. Dann ein paar Jahre später devX hat, um durch zu gehen spaggeti von Retouren und herauszufinden, was man eingeführt, einen Fehler, weil Funktion zurückgegeben zu früh. Bottom line - multi Rücksendungen sind genau so schlimm wie
goto
und sollte verwendet werden, wie oft, was wesentlich ist - nieInformationsquelleAutor Rytis I
Müssen Sie schreiben Sie Ihre Schleife: Sie sollten nicht machen eine Entscheidung, dass die Wohnung nicht gefunden, bis Sie beenden die Schleife. Sie brauchen nicht, um den Wert zuzuweisen, um die temporäre variable entweder - sobald die Wohnung gefunden ist, kehren Sie sofort.
Können Sie berichten, dass die Wohnung nicht nur gefunden, wenn Sie beenden die Schleife.
InformationsquelleAutor dasblinkenlight
was ist, wenn deine Bedingung "x".getApartmentNo().equalsIgnoreCase(aNumber)" zu false ausgewertet?
die Wohnung Datentyp "Auserwählten" nicht erstellt werden!
wie kann man etwas zurückgeben, das noch nicht instanziiert wurde?
InformationsquelleAutor Trevor Hickey
Dies ist ein Bereich Ausgabe Ausgewählt ist, erzeugt in der Seite die if-Anweisung.
Deklarieren Sie Sie außerhalb und legen Sie es auf null, dann wird die Funktion wieder gewählt, wenn die Bedingung wahr ist, oder null, wenn es nicht so ist.
InformationsquelleAutor Andrew T
Du hast Recht; Sie erklärte entschieden an der falschen Stelle. Deklarieren Sie Sie rechts, bevor Sie Ihren loop, aber weisen Sie ihn (es) zu null. So ist es garantiert Wert, wenn Sie die Rücklaufleitung.
Alternativ bei nur einer Wohnung entsprechen (oder Sie egal welche), können Sie einfach legen Sie
return x;
in der if...wahr. Und null zurückgeben, nach der Schleife, vorausgesetzt, die Schleife abgeschlossen ist. Auch, weil Sie Schleifen, jede Wohnung, die nicht match wird zeigen, die "nicht gefunden" - Meldung; Sie haben wahrscheinlich nur wollen, um Sie anzuzeigen, nachdem die Schleife abgeschlossen hat, ohne eine Wohnung zu finden.InformationsquelleAutor Carl Manaster
Die variable
chosen
im code war gefangen in dem Umfang in der es erstellt wurde, also kann es nicht verwendet werden, außerhalb der{}
. Auch der else-Zweig der if-Anweisung ausgelöst wurde, bevor der rest der for-Schleife ran.Die Sie nicht wirklich brauchen, um zu speichern Sie die ausgewählte Wohnung, können Sie einfach schicken Sie es sofort, so wie hier:
Ohne dass der rest des Codes ist, kann ich nicht sicher sagen, was falsch ist.
InformationsquelleAutor ricochet1k
Deklarieren der Variablen 'gewählt' werden, bevor die for-Schleife wie diese:
Außerdem können Sie brechen aus der Schleife, wenn Sie sobald Sie finden die Wohnung, die Sie suchen. Wenn die Liste groß ist, es könnte etwas Zeit sparen.
InformationsquelleAutor Chris911
Eine einfache (und richtige) Weg zu schreiben, die Methode wäre:
Es ist nicht notwendig zu deklarieren Sie eine lokale variable für einen Wert, der zurückgegeben werden soll, sofort. Auch die Meldung sollte dargestellt werden, nur nach wird die Schleife beendet, denn nur dann sind wir sicher, dass keine Wohnung hatte die Nummer gesucht wird.
Bezug auf den code in der Frage, du hast Recht: die variable
chosen
sollten deklariert worden vor diefor
- Schleife, so dass auf Sie verwiesen werden kann nach der Schleife. Der Weg, den Sie erklärt, es ist nur sichtbar innerhalb derif
block.InformationsquelleAutor Óscar López
Variable
chosen
von der Funktion zurückgegeben wird out-of-scope-hier deklarieren Sie am Anfang der Methode, kurz bevor die Schleife beginnt.InformationsquelleAutor Ameer Moaaviah