mehrere Rückgabenwerte aus Methode

Hallo zusammen,

ich bin mir sicher, dass hier mir jemand kurz helfen kann.
Ich muss aus einer Methode mehrere Rückgabewerte übermitteln. Wie geht das am bessten?

Hier der Java-Quellcode:

package de.software.paket;
import java.io.*;
public class MainKlasse {

// Methoden
public String get_student() throws IOException{
String firstN = null;
String lastN = null;
String gender = null;
String klasse = null;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.print("Vorname: ");
firstN = br.readLine();
System.out.print("Nachname: ");
lastN = br.readLine();
String name = firstN + ' ' + lastN;
System.out.print("Klasse: ");
klasse = br.readLine();
return(name,klasse);
}
public static void main(String[] args) throws IOException
{
System.out.println("Programm Start");
MainKlasse MK = new MainKlasse();
String (name,klasse) = MK.get_student(); // Methoden-Aufruf Eingabe Schülerdaten Eingabe
System.out.println("Der Schüler heißt: "+name);
}
}
 
Du kannst als Rückgabe ein Objekt benutzen welches deine Daten enthält, z.B.: Ein Object mit Namen Student, mit den Eigenschaften Name und Klasse.
 
Um kurz zur bestehenden Antwort auszuholen, Java unterstuetzt mehrere Rueckgabewerte aus einer Methode nicht. Der Grund ist schlicht und ergreifend dass die nicht dafuer entworfen wurde. Eine spaeteres Nachruesten haette vermutlich zu inkompatiblen Aenderungen gefuehrt und dies ist inakzeptabel. Davon unabhaengig bedeutet es wenn du mehrere Rueckgabewerte hast, dass diese irgendiwe zusammengehoeren, daber waere es gut wenn du diese in einer Klasse gruppierst um diesen Zusammenhang klar zu definieren.

Es gibt einige Hilfsklassen welche es dir erlauben mehrere Werte einfach zurueck zu geben, zum Beispiel wenn du eine einfache "Tuple" Klasse hast, oder eine welche vier Werte halten kann:

Java:
Quadruple<String, String, BigDecimal, Integer> article = logicClass.getArticle(someName);

anotherLogicClass.doSomething(differentValue, article.getThirdValue(), article.getSecondValue(), yetAnotherValue);

Dies hat aber den Nachteil dass man hier Lesbarkeit und Verstaendlichkeit fuer etwas weniger tippen eintauscht. Insbesondere mit mehr Werten wird schnell klar dass dies sehr schnell unleserlich werden wird. Mit einer eigenen Klasse hierfuer steigt die Lesbarkeit dann doch um ein vielfaches.

Java:
Article article = logicClass.getArticle(someName);

anotherLogicClass.doSomething(differentValue, article.getPrice(), article.getDescription(), yetAnotherValue);
 
Der Rückgabetyp einer Methode kann jeder beliebige Typ sein. Vom einfachen Boolean- oder Integerwert bis hin zum Objekt einer bestimmten Klasse und damit steht dir alles offen: Eine eigene Klasse, welche die relevanten Informationen enthält oder Arrays, List<>, Map<> usw. die gleich eine beliebige Anzahl von Werten (vom gleichen Typ) zurück liefern.
 
Ich denke ein Array wie String[][] student=new String[Anzahl Felder][Anzahl Schüler] in [0][0]Vorname in [1][0]Name in[2][0]Gender in[3][0]klasse
in[0][1] Joachim in[1][1]Woldemord in[2][1]m in[3][1] XII usw. ausgeben kann man es in einen Text und weil er kommas enthält kann man das ganze prima als CSV Kommagertrennt in Excel einlesen.
 
Ich denke ein Array wie String[][] student=new String[Anzahl Felder][Anzahl Schüler] in [0][0]Vorname in [1][0]Name in[2][0]Gender in[3][0]klasse
in[0][1] Joachim in[1][1]Woldemord in[2][1]m in[3][1] XII usw. ausgeben kann man es in einen Text und weil er kommas enthält kann man das ganze prima als CSV Kommagertrennt in Excel einlesen.
Bitte nicht! Wenigstens als Student[] students = new Student[Anzahl Schüler] mit Vorname in [0].vorname Name in [0].name ...
 
Ich denke ein Array wie String[][] student=new String[Anzahl Felder][Anzahl Schüler] in [0][0]Vorname in [1][0]Name in[2][0]Gender in[3][0]klasse
in[0][1] Joachim in[1][1]Woldemord in[2][1]m in[3][1] XII usw. ausgeben kann man es in einen Text und weil er kommas enthält kann man das ganze prima als CSV Kommagertrennt in Excel einlesen.
Das ist allerdings eine denkbar schlechte Lösung!

Arrays oder Listen als Rückgabetyp, wenn es sich um gleichartige Daten handelt, wie bei getAllStudents(), was dann ein Student[] zurück liefern kann.
 
Verwende lieber eine Containerklasse mit eindeutigen Feldnamen. Davon dann eine Liste und du hast ausgesorgt.
Das ist schnell geschrieben und erspart dir viele Tränen oder zumindest ausgerissene Haare.

Benenne die Klasse z.B. "StudentInfos", dann siehst du am Methodenheader auch sofort, welche Art von Daten geliefert werden.

Falls du schon Java 16 verwendest, bietet sich hier "record" an, damit ersparst du dir die Tiparbeit für die Klasse.

ps: ersetze "get_student()" entsprechend Java-Konvention durch "getStudent()".
Auch würde ich mich an deiner Stell von Anfang an daran gewöhnen, vielsagendere Namen verwenden, "getStudent()" impliziert einen reinen Datenzugriff, "readStudentInfosFromConsoleInput()" sagt doch mehr darüber aus, was die Methode eigentlich macht, oder?
 

Zurück
Oben