Methoden geben nichts zurück

oSnake

Mitglied
Hallo Freunde,

folgendes Problem: die Methoden geben anscheinend nichts zurück, wenn ich die toString Methode ausführen will stehen da nur die leeren Variabel Werte drin.


Traue mich heute das erste mal wieder seit bestimmt einem Jahr an Java dran 😀.

Könntet Ihr mir vielleicht ein bisschen auf die Sprünge helfen ?


Java:
package Mensch;

public abstract class Mensch {
    String name;
    String chromosomen;
    int alter;
    int groesse;
    int gewicht;

    Mensch(String name, int alter, int groesse, int gewicht) {
        name = this.name;
        alter = this.alter;
        groesse = this.groesse;
        gewicht = this.gewicht;
    }

    String name() {
        return name;
    }

    String chromosomen() {
        return chromosomen;
    }

    int alter() {
        return alter;
    }

    double preisHaarschnitt() {
        if (chromosomen.equals("XY")) {
            return 10 + 0.25 * alter;
        }        else {
            return 20 + 2 / 3 * alter;
        }
    }

    int groesse() {
        if (chromosomen.equals("XY")) {
            return groesse + 5;
        }        else {
            return groesse;
        }
    }

    int gewicht() {
        if (chromosomen.equals("XY")) {
            return gewicht;
        }        else {
            return gewicht - 5;
        }
    }

    public String toString() {
        String s = (name() + " " +  chromosomen() + " " +  alter() + " " +  groesse() + " " +  gewicht());
        return s;
    }
}

Java:
package Mensch;

public class Frau extends Mensch {
    Frau(String name, int alter, int groesse, int gewicht) {
        super(name, alter, groesse, gewicht);
        chromosomen = "XY";
    }
}

Java:
package Mensch;

public class Mann extends Mensch {
    Mann(String name, int alter, int groesse, int gewicht) {
        super(name, alter, groesse, gewicht);      
        chromosomen = "XY";
    }
}

Vielen Dank.

o
 
Zuletzt bearbeitet von einem Moderator:
Vielleicht das:
@Override an der toString vergessen?

Welche Methoden denn genau?
Und wie rufst du sie auf?

Frage über Fragen 🙂

EDIT: Problem gefunden:
name = this.name;
alter = this.alter;
groesse = this.groesse;
gewicht = this.gewicht;

solltest du drehen^^

this.name = name;
usw.

Besser wäre hier jedoch der Frau und dem Mann selbst die Methoden implementieren zu lassen und nicht in Mensch nach chromosom zu filtern
 
Mal angenommen ich bin jetzt in der Main

Code:
public class Main{

public static void main(String []args){


Mann Hans = New Mann("Hans Meier", 24 , 170, 86);

int x = Hans.alter();

System.out.println(x);

}
}


Als Ergebnis würde jetzt hier 0 rauskommen.
Das meinte ich damit dass die Methoden nichts zurück geben.
 
Wie Jardcore editiert hat: Die Zuweisung im Konstruktor ist falsch. Du überschreibst den Wert des Parameters mit dem Wert der Instanzvariable. Aber das soll ja umgekehrt sein: Der Wert des Parameters soll in die Instanzvariable.
ziel = quelle;
 
Jardcore hat dein Problem schon gefunden 😉

Von mir nur der Hinweis: Methoden stellen Tätigkeiten dar, daher sollten sie auch entsprechend der Tätigkeit benannt werden. Damit man anhand des Namens erahnen kann was die Methode macht.
Beispiel:
Statt "groesse()" sollte die Methode "getGroesse()" heißen. Damit weiß der Programmierer diese Methode wird als Rückgabewert die Größe liefern. (Wie die Größe berechnet wird ist dem Aufrufer egal, nur das er sie bekommt ist wichtig).

Es gibt dafür zwar kein Gesetz, aber der Großteil der Programmierer haltet sich dran, da es einfach unsere Arbeit erleichtert 😉
 
Habe deinen Code mal ein wenig aufgeräumt 🙂
Java:
public abstract class Mensch {
    protected String name;
    protected String chromosomen;
    protected int alter;
    protected int groesse;
    protected int gewicht;

    Mensch(String name, int alter, int groesse, int gewicht) {
        this.name = name;
        this.alter = alter;
        this.groesse = groesse;
        this.gewicht = gewicht;
    }

    public abstract double preisHaarschnitt();
   
    public String getName() {
        return name;
    }
   
    public int getAlter() {
        return alter;
    }
   
    public String getChromosomen() {
        return chromosomen;
    }
   
    public int getGroesse() {
        return groesse;
    }
   
    public int getGewicht() {
        return gewicht;
    }

    @Override
    public String toString() {
        return name + " " + chromosomen + " " + alter + " " + groesse + " " + gewicht;
    }
}
Java:
public class Frau extends Mensch{

    Frau(String name, int alter, int groesse, int gewicht) {
        super(name, alter, groesse, gewicht);
        chromosomen = "XY";
    }
   
    @Override
    public int getGewicht() {
        return gewicht - 5;
    }
   
    @Override
    public int getGroesse() {
        return groesse + 5;
    }

    @Override
    public double preisHaarschnitt() {
        return 10 + 0.25 * alter;
    }
}
Java:
public class Mann extends Mensch {

    Mann(String name, int alter, int groesse, int gewicht) {
        super(name, alter, groesse, gewicht);
        chromosomen = "Y";
    }
   
    @Override
    public int getGewicht() {
        return gewicht + 5;
    }
   
    @Override
    public int getGroesse() {
        return groesse - 5;
    }

    @Override
    public double preisHaarschnitt() {
        return 20 + 2 / 3 * alter;
    }
}
Die Berechnungen musst du nochmal Prüfen, hab einfach + 5 - 5 irgendwo rangeschrieben^^
 

Neue Themen


Zurück
Oben