Hilfe mit dem Code?
public class UeberladeneMethoden {
public static void main(String[] args) {
Person();
}
public static void Person(String name, int alter, String wohnort) {
System.out.println(name + " ist " + alter + " Jahre alt und wohnt in " + wohnort);
}
public static void Person(String name, String wohnort) {
System.out.println(name + " wohnt in " + wohnort);
}
public static void Person(String name, int alter) {
System.out.println(name + " ist " + alter + " Jahre alt.");
}
}
Wie kann ich da folgendes implementieren: Falls kein alter übergeben wird, dann wird standartmäßig 25 (also int alter = 25) ausgegeben. Geht das, ohne den bisherigen Code zu ändern, sondern ihn nur zu ergänzen?
3 Antworten
Falls kein alter übergeben wird,
Also ein Alter als Zahl wird immer übergeben, sonst steht wahrscheinlich in alter== 0 drinnen.
Schreib eine
Methode
private int alter25(int alter2check){
return (alter2check<=0)?25:alter2check;
}
Ändere nun überall ...+ alter +...
in ...+ alter25(alter) +...
Oder vor deiner Ausgabezeile
alter=alter25(alter) bzw. alter=(alter<=0)?25:alter;
Das ist zwar mega hässlich aber es sollte funktionieren, Programm aus der Hüfte geschossen nicht am Computer eingetippt, nur gerade einfach so rein gesprochen!
Im Gegensatz zu C++, Python, Ada und anderen bietet Java nicht die Möglichkeit, für Methodenparameter Defaultwerte direkt zu definieren. Man hilft sich mit der Definition zusätzlicher Methoden, in denen
- die Parameter völlig fehlen, für die Defaultwerte zu verwenden sind
- eine andere Methode aufgerufen wird, die einen vollständigen Parametersatz hat. Im Aufruf werden dann die Defaultwerte angegeben.
Wenn du ergänzt:
public static void Person(String name) {
Person(name, 25);
}
kannst du schreiben
Person("Hans")
und erhältst diese Ausgabe:
Hans ist 25 Jahre alt.
Wenn man dieses Schema konsequent anwenden wollte, wäre die Methode
public static void Person(String name, String wohnort) {
System.out.println(name + " wohnt in " + wohnort);
}
so zu ändern:
public static void Person(String name, String wohnort) {
Person(name, 25, wohnort);
}
Mit Konstruktoren geht das auch, allerdings muss der Aufruf des allgemeineren Konstruktors mit dem Schlüsselwort this geschehen. Für deine Klasse sähe das so aus:
/* allgemeiner Konstruktor */
UeberladeneMethoden (String name, int alter) {
System.out.println(name + " ist "
+ alter + " Jahre alt.");
}
/* Spezieller Konstruktor mit Defaultwert für alter */
UeberladeneMethoden (String name) {
this(name, 25);
}
Der Aufruf
new UeberladeneMethoden ("Johanna");
liefert jetzt:
Johanna ist 25 Jahre alt.
In deinem Fall wird ja immer ein Alter übergeben (sonnst würde dein Programm nicht starten). Aber du kannst einen Wert nehmen wie -1 der immer übergeben wird wenn du „kein Alter“ hast und mit if-Abfragen dann nach dem Wert fragen und dann alter=25 in der Methode aufrufen.