Ich versuche, 2 Werte von einer Java-Methode zurückzugeben, erhalte jedoch diese Fehler. Hier ist mein Code:
// Method code
public static int something(){
int number1 = 1;
int number2 = 2;
return number1, number2;
}
// Main method code
public static void main(String[] args) {
something();
System.out.println(number1 + number2);
}
Error:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - missing return statement
at assignment.Main.something(Main.java:86)
at assignment.Main.main(Main.java:53)
Java Ergebnis: 1
java
function
return-value
javaLearner.java
quelle
quelle
Antworten:
Anstatt ein Array zurückzugeben, das die beiden Werte enthält, oder eine generische
Pair
Klasse zu verwenden, sollten Sie eine Klasse erstellen, die das Ergebnis darstellt, das Sie zurückgeben möchten, und eine Instanz dieser Klasse zurückgeben. Geben Sie der Klasse einen aussagekräftigen Namen. Die Vorteile dieses Ansatzes gegenüber der Verwendung eines Arrays liegen in der Typensicherheit und erleichtern das Verständnis Ihres Programms.Hinweis: Eine generische
Pair
Klasse, wie in einigen anderen Antworten hier vorgeschlagen, bietet Ihnen ebenfalls Typensicherheit, vermittelt jedoch nicht, was das Ergebnis darstellt.Beispiel (das keine wirklich aussagekräftigen Namen verwendet):
quelle
Java unterstützt keine mehrwertigen Rückgaben. Gibt ein Array von Werten zurück.
quelle
Sie können ein Generikum implementieren,
Pair
wenn Sie sicher sind, dass Sie nur zwei Werte zurückgeben müssen:und lassen Sie dann die Methode Folgendes zurückgeben
Pair
:quelle
Sie können in Java nur einen Wert zurückgeben. Der einfachste Weg ist also folgender:
Hier ist eine aktualisierte Version Ihres Codes:
quelle
Hier ist die wirklich einfache und kurze Lösung mit SimpleEntry:
Verwendet nur integrierte Java-Funktionen und bietet den Vorteil der Typensicherheit.
quelle
Sie müssen Sammlungen verwenden, um mehr als einen Rückgabewert zurückzugeben
In Ihrem Fall schreiben Sie Ihren Code als
quelle
quelle
Verwenden Sie ein Objekt vom Typ Pair / Tuple. Sie müssen nicht einmal eines erstellen, wenn Sie von Apache commons-lang abhängig sind. Verwenden Sie einfach die Pair- Klasse.
quelle
Ich bin gespannt, warum sich niemand die elegantere Rückruflösung ausgedacht hat. Anstatt einen Rückgabetyp zu verwenden, verwenden Sie einen an die Methode übergebenen Handler als Argument. Das folgende Beispiel zeigt die beiden gegensätzlichen Ansätze. Ich weiß, welcher der beiden für mich eleganter ist. :-)
quelle
Sie müssen keine eigene Klasse erstellen, um zwei verschiedene Werte zurückzugeben. Verwenden Sie einfach eine HashMap wie folgt:
Sie haben sogar den Vorteil der Typensicherheit.
quelle
Meiner Meinung nach ist es am besten, eine neue Klasse zu erstellen, deren Konstruktor die Funktion ist, die Sie benötigen, z.
Verwenden Sie dann einfach den Konstruktor wie die Funktion:
und Sie können pR.sth1, pR.sth2 als "2 Ergebnisse der Funktion" verwenden.
quelle
Sie können auch veränderbare Objekte als Parameter senden. Wenn Sie Methoden verwenden, um sie zu ändern, werden sie geändert, wenn Sie von der Funktion zurückkehren. Bei Sachen wie Float funktioniert es nicht, da es unveränderlich ist.
Das Ergebnis ist: Rutger
quelle
Geben Sie ein Array von Objekten zurück
quelle
Erstens wäre es besser, wenn Java Tupel für die Rückgabe mehrerer Werte hätte.
Zweitens codieren Sie die einfachste
Pair
Klasse oder verwenden Sie ein Array.Wenn Sie jedoch ein Paar zurückgeben müssen, überlegen Sie, welches Konzept es darstellt (beginnend mit den Feldnamen, dann dem Klassennamen) - und ob es eine größere Rolle spielt als Sie dachten und ob es Ihrem Gesamtdesign helfen würde, ein Paar zu haben explizite Abstraktion dafür. Vielleicht ist es ein
code hint
...Bitte beachten Sie : Ich bin nicht dogmatisch sagen , es wird helfen, aber nur um zu sehen, zu sehen , ob es funktioniert ... oder wenn dies nicht der Fall.
quelle
und so machen Sie es in JS :
return { objA, valueB }
. Ich weiß, dass es offtopisch ist, aber ich kann mich nicht enthalten, diesen Kommentar zu hinterlassen, nachdem ich gesehen habe, wie eine ganz neue Klasse in Java implementiert werden muss. JavaScript - verschwenden Sie kein Leben mehr und beginnen Sie mit dem Scripting!quelle