Probleme bei Verwendung short und int im Constuctor

Hallo,
ich habe hier eine Übungsaufgabe zu Konstruktoren, bei der sollen die Datentypen entsprechend der Vorgabe verwendet werden.
Beim Ausführen geht das Programm davon aus, dass es 2 mal Int erhält, wie muss ich das Alter angeben damit es als "short" erkannt wird?
Die Variablen waren in der Aufgabe mit den entsprechenden Datentypen vorgegeben.
Mir stellt sich da dann noch die Frage, wenn "age" und "height" beides Integer wären, wie würde der Constructor erkennen, welcher Wert was ist?

Hier mein Code
Java:
/* Datingwebsite

Lassen Sie uns eine Benutzerdatenbank für eine Dating-Website erstellen.
Aber hier liegt das Problem: Sie haben die erforderliche Reihenfolge der Argumente vergessen und es ist keine technische Dokumentation verfügbar.
Entwerfen Sie eine Benutzerklasse , die über die folgenden Felder verfügt: Name ( String ), Alter ( Short ) und Größe ( Int ).
Erstellen Sie die entsprechende Anzahl von Konstruktoren, sodass Name, Alter und Größe in beliebiger Reihenfolge angegeben werden können.
 */
public class DUser {
    String name;
    short age;
    int height;

    public DUser(String name, short age, int height){
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public DUser(String name, int height, short age){
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public DUser(short age, int height, String name){
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public DUser(short age, String name, int height){
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public DUser(int height, String name, short age){
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public DUser(int height, short age, String name){
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public static void main(String[] args) {
        DUser user1 = new DUser("Chris1", 27, 185);
        DUser user2 = new DUser("Chris2", 190, 55);
        DUser user3 = new DUser(44, "Chris3", 185);
        System.out.println(user1.name + "Alter: " + user1.age + "Größe: " + user1.height);
        System.out.println(user2.name + "Alter: " + user2.age + "Größe: " + user2.height);
        System.out.println(user3.name + "Alter: " + user3.age + "Größe: " + user3.height);
    }
}

Die Datentypen wurden leider (außer String und Integer) noch nicht weiter erklärt und nach einer Woche abendlichen Selbststudiums bin ich da auch noch nicht durch Zufall vorbei gekommen.

Entschuldigung, Thema wäre bei Hausaufgaben vielleicht besser aufgehoben ( na ja, wenn es nicht vom Lehrer kommt, sondern selbst gesucht ist, sind es ja keine ;-) ) .

Danke
Viele Grüße
Bea
 
Zuletzt bearbeitet:
Es ist normalerweise nicht üblich die Ctor's so aufzublasen. Man kann das auch etwas kürzer/übersichtlicher machen.
Java:
    public DUser(String name, short age, int height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public DUser(String name, int height, short age) {
        this(name, age, height);
    }

    public DUser(short age, int height, String name) {
        this(name, age, height);
    }

    public DUser(short age, String name, int height) {
        this(name, age, height);
    }

    public DUser(int height, String name, short age) {
        this(name, age, height);
    }

    public DUser(int height, short age, String name) {
        this(name, age, height);
    }
 
Hallo,
danke für die wertvollen Tipps.

@Barista
- da war ich ja im Selbstversuch schon nah dran, hatte schon "short" zur Altersangabe dazu gefügt, nur dummerweise ohne Klammern. 🤭
Bei einem Beispiel zur Druckausgabe auf Console hatte ich schon gesehen, dass bei der folgenden Formel bei einem Double nach dem Wert direkt ein d angegeben war um das deutlich zu machen, aber so einfach war es hier nicht.

@Oneixee5
danke für den Link, da werde ich in Zukunft häufiger lesen
Die weiteren Konstruktoren, sammeln also nur die verschiedenen Eingabevarianten ein und "mappen" sie mit this() auf den ersten Konstruktor. Das ist klar viel übersichtlicher und wartungsfreundlicher.

Ich werde für meine Lösung die Variante von Barista mit der Anpassung bei den Konstruktoren von Oneixee5 verwenden und mir das entsprechend kommentieren, um es später nachlesen zu können.

Wie wäre ich vorgegangen, wenn ich 2 Integer gehabt hätte, mit der Variante von Oneixee5 vermutlich aber dann haben die verschiedenen Konstruktoren eigentlich keinen großen Mehrwert mehr, da ich eigentlich immer die Variablen setzten muss.

Eine andere Frage noch, solche Themen hier im Bereich oder eher im Bereich Hausis?

Viele Grüße
Bea
 
Wie wäre ich vorgegangen, wenn ich 2 Integer gehabt hätte, mit der Variante von Oneixee5 vermutlich aber dann haben die verschiedenen Konstruktoren eigentlich keinen großen Mehrwert mehr, da ich eigentlich immer die Variablen setzten muss.
Wenn Du zwei Variablen vom gleichen Typ hast, dann kannst Du keine zwei Konstruktoren haben, bei denen Du die Parameter vertauschst. Die Differenzierung der Konstruktoren erfolgt rein durch die Typen, d.h. ein Konstruktor mit Parametern int a, int b und der getauschte Konstrultor mit int b, int a sind nicht unterscheidbar.

Daher ist so wichtig, was @Oneixee5 schrieb:
Es ist normalerweise nicht üblich die Ctor's so aufzublasen.
Es macht einfach keinen Sinn, zwei Konstruktoren oder Methoden zu haben, die sich nur in der Reihenfolge der Parameter unterscheiden!
Das kann interessant sein als kleine Aufgabe, um dann evtl. so Casts zu lernen oder zu demonstrieren aber darüber hinaus macht solch ein Code schlicht keinen Sinn! In der Regel überlegt man sich eine Reihenfolge, und an der hält man dann fest.

Du hast dann z.B. String name, short age, int height und es kann sich nur aufblähen, wenn Parameter optional ein könnten. Dann hast Du evtl. die Konstruktoren:
String name, short age, int height
String name, short age
String name, int height
short age, int height
String name
short age
int height
Und dann ggf. noch den Konstruktor ganz ohne Parameter...

Aber auch da wird dann eher ein Builder Pattern eingesetzt um eben genau sowas zu vermeiden.

Eine andere Frage noch, solche Themen hier im Bereich oder eher im Bereich Hausis?
Die Fragen sind hier vollkommen in Ordnung. Die Unterscheidung ist, dass es hier um fachliche Fragen geht (Das ist der Fall bei Dir) und der Hausaufgabenbereich ist mehr ein "Ich habe die Aufgabe und will nur eine Lösung" Bereich, also ohne wirklich etwas lernen zu wollen um eigenständig die Aufgabe lösen zu können.
 

Neue Themen


Zurück
Oben