Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern?

Nutzer321

Mitglied
Hallo zusammen,

schulisch bedingt, muss ich mich derzeitig mit Java 6 auseinandersetzen. Derzeitig arbeiten wir an einem BMI-Rechner, bei dem in eine Klasse (Starter) mit main Methode der Vorname, Gewicht und Größe abgefragt wird. Diese Werte werden mit Get/Set an die statische Klasse Daten gesendet und dort mit einer Methode berechnet und mit der Get Methode wieder als Ergebnis aus der Main Klasse abgefragt wird.
Jetzt sollen wir es aber so machen, dass der berechnete BMI-Wert nicht in einer Methode zwischengespeichert wird, sondern einzeln als Variable in der Daten-Klasse berechnet und gespeichert wird. Leider weiß ich nicht, wie ich das tun soll.

Mein Ansatz ist, die Variable in der BMI-Set Methode zu speichern, aber leider bekomme ich immer 0.0 als Ergebnis raus, die Methode mit calcBmi funktioniert einwandfrei. Weiß jemand zufällig wie ich das richtig hinbekomme?

Ich weiß zwar, dass es hier ungern gesehen ist, Hausaufgaben reinzustellen, aber ich weiß nicht wie ich das richtig hinbekomme und finde auch keine Lösung im Internet🙂🙃

Anbei der Code, den ich bisher hab.
PS: Die Werte v_bmi, sowie calcBmi(), habe ich hier nur als Notiz abgespeichert, da wir sie für diese Aufgaben nicht verwenden sollen .



Starter Klasse:
Java:
package bmi;

import java.util.Scanner;

public class Starter {


    public static void main(String[] args) {
        
        Scanner tastatur;
        tastatur = new Scanner(System.in);
        
        Daten meineDaten;
        meineDaten = new Daten();
        
        
        double v_gewicht, v_groesse, v_bmi, bmigroesse;
        String v_name;
        
        System.out.println("Willkommen beim BMI-Rechner");
        
        System.out.println("Bitte geben sie ihren Namen ein: ");
        v_name = tastatur.next();
        meineDaten.setVorname(v_name);
        
        System.out.println("Bitte geben sie nun ihr Gewicht in kg ein: (Beispiel 56) ");
        v_gewicht = tastatur.nextDouble();
        meineDaten.setGewicht(v_gewicht);
        
        System.out.println("Fahren sie mit ihrer Größe in cm fort: (Beispiel: 182) ");
        v_groesse = tastatur.nextDouble();
        meineDaten.setGroesse(v_groesse);
        
        System.out.println("Danke für ihre Eingaben ");
        System.out.println("Hallo " + meineDaten.getVorname());
        System.out.println("Ihre eingegeben Daten lauten: ");
        System.out.println("Name: " + meineDaten.getVorname());
        System.out.println("Gewicht: " + meineDaten.getGewicht());
        System.out.println("Größe: " + meineDaten.getGroesse());
        
        
        
        //Ergebnis
        //bmigroesse = (v_groesse/100) * (v_groesse/100);
        v_bmi = v_gewicht / (v_groesse*v_groesse);
        
        //System.out.println("Hallo " + meineDaten.getVorname() + " Dein BMI (in Start) ist: " + v_bmi);
        
        //System.out.println("Hallo " + meineDaten.getVorname() + " Dein BMI (method) ist: " + meineDaten.calcBMI());
        
        System.out.println("Hallo " + meineDaten.getVorname() + " Dein BMI (property) ist " + meineDaten.getBmi());
       
         
    }
}

Daten-Klasse
Java:
package bmi;

public class Daten {


    private String vorname;


    public String getVorname() {
        return vorname;
    }


    public void setVorname(String vorname) {
        this.vorname = vorname;
    }


    private double gewicht;


    public double getGewicht() {
        return gewicht;
    }


    public void setGewicht(double gewicht) {
        this.gewicht = gewicht;
    }


    private double groesse;


    public double getGroesse() {
        return groesse;
    }


    public void setGroesse(double groesse) {
        this.groesse = groesse;
    }


        
        public double calcBMI(){
            return gewicht/(groesse*groesse);
        }



        private double bmi;
        





        public void setBmi(double bmi) {
            this.bmi = gewicht/(groesse*groesse);
        }
        
        public double getBmi() {
            return bmi;
        }

}
 
Zuletzt bearbeitet von einem Moderator:
Jetzt sollen wir es aber so machen, dass der berechnete BMI-Wert nicht in einer Methode zwischengespeichert wird, sondern einzeln als Variable in der Daten-Klasse berechnet und gespeichert wird.
Wie sieht der Wortlaut der Aufgabenstellung dazu aus? Die Variante mit calcBMI ist eigentlich der Way to go, sowohl Zeile 45 in Starter als auch 52-65 sind im Vergleich dazu eher ein Antipattern und nicht sinnvoll.



Mein Ansatz ist, die Variable in der BMI-Set Methode zu speichern, aber leider bekomme ich immer 0.0 als Ergebnis raus, die Methode mit calcBmi funktioniert einwandfrei. Weiß jemand zufällig wie ich das richtig hinbekomme?
Naja, die setBmi-Methode rufst du nie auf, also hat bmi immer den Default-Wert, und das ist 0.0 🙂

EDIT: und der Parameter des Setters wird nie benutzt, das solltest du vielleicht auch ändern 😉
 
public void setBmi(double bmi) { this.bmi = gewicht/(groesse*groesse); }

Eine Settermethode sollte einen Wert setzen. Hier wird zwar this.bmi gesetzt aber nicht durch den übergebenen Parameter bedingt.
An dieser Stelle wäre eine Gettermethode passender.


Java:
public double getBMI(){
    // Division durch 0 abfangen
    return gewicht/(groesse*groesse);
}
 
Danke schonmal für eure Hilfen
Wie sieht der Wortlaut der Aufgabenstellung dazu aus? Die Variante mit calcBMI ist eigentlich der Way to go, sowohl Zeile 45 in Starter als auch 52-65 sind im Vergleich dazu eher ein Antipattern und nicht sinnvoll.
Die Aufgabenstellung lautet: "Anstatt den BMI in der Methode zu speichern, soll jetzt der BMI in einer eigenen Variable in der Klasse Daten gespeichert werden."

Die Zeile 45 gehört noch zum Beginn, bei der wir nur in der Starter Klasse gerechnet haben(ohne die Daten Klasse) 🙂 .
Die Zeilen 52-65 habe ich erstellt um ähnlich wie bei größe, vorname... den Wert BMi irgendwie abzuspeichern.

Der calcBMI gehört ebenfalls noch zu der vorherigen Aufgabe, bei der man den BMi in einer Methode speichern sollte.

Naja, die setBmi-Methode rufst du nie auf, also hat bmi immer den Default-Wert, und das ist 0.0 🙂

EDIT: und der Parameter des Setters wird nie benutzt, das solltest du vielleicht auch ändern 😉
Und wie würde ich es dann hinbekommen, dass ich in der setMethode sage, dass der BMI aus gewicht/(größe*größe) berechnet wird und ich ihn dann mit der get Methode aufrufe?

Eine Settermethode sollte einen Wert setzen. Hier wird zwar this.bmi gesetzt aber nicht durch den übergebenen Parameter bedingt.
An dieser Stelle wäre eine Gettermethode passender.
Und bekomme ich es irgendwie hin, die Variable bmi durch die Parameter zu setzen?

public double getBMI(){ // Division durch 0 abfangen return gewicht/(groesse*groesse); }
Durch diese Methode setze ich ja nur die Methode getBmi durch die Parameter, aber nicht die Variable bmi, was leider nicht der Aufgabenstellung entspricht🙂.

Aber trotzdem nochmal danke, dass ihr euch die Zeit nehmt.
 
Und bekomme ich es irgendwie hin, die Variable bmi durch die Parameter zu setzen?
Der BMI berechnet sich durch BMI = Gewicht/ Grösse^2. Das bedeutet, dass diese Werte voneinander abhängig sind. --> Die Methode setBMI müsste als Parameter 2 der 3 Werte haben, um den BMI eindeutig zu bestimmen. z.B.
[CODE lang="java" title="setBMI" highlight="1"]void setBMI( double groesse, double gewicht ){
this.groesse = groesse;
this.gewicht = gewicht;
bmi = gewicht/(groesse*groesse);
}[/CODE]
Aber eine setMethode für den BMI macht hier keinen Sinn. Besser ist es das Gewicht und die Grösse zu setzen. Dadurch ist indirekt der BMI bereits gesetzt, da er sich aus den beiden Werten errechnen lässt. Daher genügt eine getterMethode wie oben gezeigt.
 
Zuletzt bearbeitet:

Zurück
Oben