Methoden BMI -Wert Aufgabe(Methoden)

g_gex

Mitglied
Hallo,

ich versuche grad Java zulernen und habe grade bei einer Aufgabe ein Problem.
Es geht darum ein BMI - Wert zu berechnen aber in der Konsole ist der BMI wert gleich 0 oder es ist Nan (not a Number)
mein Code sieht wie folgt aus :

Java:
import java.util.Scanner;

public class BMI {

double kg ;
double meter;

public BMI(double kg, double meter) {

this.kg = kg;
this.meter = meter;
}

public BMI() {

}

public BMI auslesen() {

Scanner scan = new Scanner(System.in);
System.out.println("Geben Sie bitte Ihr Gewicht ein: ");
double kg = scan.nextDouble();

System.out.println("Geben Sie hier bitte Ihre Größe ein: ");
double meter = scan.nextDouble();

BMI b = new BMI(kg, meter);

return b;

}

public double berechne(double kg, double meter) {

double bmi = kg / (meter * meter);
System.out.println(meter);
System.out.println("Ihr BMI-Wert beträgt: " + bmi);

return bmi;

}

public void ausgeben() {

berechne(kg, meter);

}

public static void main(String[] args) {

BMI s = new BMI();
s.auslesen();
s.ausgeben();

}

}
Was mache ich falsch? obwohl ich mit der Scanner die daten lesen ist meter = 0.0
Braucht man denn in der Methode berechne()einen return-Wert?
 
Zuletzt bearbeitet von einem Moderator:
Bitte deinen Java Code in [code=java]//Java code[/code] posten

Laut deiner Programmlogik gehört statt:
Java:
BMI s = new BMI();
s.auslesen();
s.ausgeben();

Java:
BMI s = new BMI();
s = s.auslesen();
s.ausgeben();
 
Variablen deklariert man nur einmal und initialisiert sie höchstens einmal. Dann nennt man es Zuweisung.

Du hast eine Art immutable BMI Klasse erstellt und sogar eine Fluent API eingebaut.

Also rekapitulieren wir mal die Klasse:
  • BMI berechnen ist abhängig von Größe und Gewicht, also ist sie nicht einem gewissen Objektzustand. Das heißt man kann die Methode berechne static machen.
  • Also man braucht zum initialisieren eines BMI-Objektes entweder die Daten (Größe und Gewicht) oder man läßt es dem User. Darum kann man ein Builder-Pattern anlegen und die Builder-Methode(auslesen) static machen.
  • berechne-Methode sollte wie der Name schon sagt nur berechnen und keine zusätzlichen Ausgaben tätigen.
  • Hingegen Ausgabe genau das machen sollte.
  • Auch sollte man das ganze in Englisch halten (ist guter Programmier-Usus)

Dann sollte deine Klasse so aussehen:
Java:
import java.util.Scanner;

public class BMI {

   private final double weigth;
   private final double height;

   public BMI(double weight, double height) {

     this.weigth = weight;
     this.height = height;
   }

   public static BMI read() {

     Scanner scan = new Scanner(System.in);
     System.out.println("Geben Sie bitte Ihr Gewicht ein (kg): ");
     double weight = scan.nextDouble();

     System.out.println("Geben Sie hier bitte Ihre Größe ein (m): ");
     double height = scan.nextDouble();

     return new BMI(weight, height);

   }

   public static double calculate(double weight, double height) {
     return weight / (height * height);
   }

   public void print() {
     double bmi = calculate(weigth, height);
     System.out.format("Ihre Größe und Gewicht betragen: %f m und %f kg.%n", height, weigth);
     System.out.println("Somit ist Ihr BMI: " + bmi);
   }

   public static void main(String[] args) {
     BMI s = BMI.read();
     s.print();
   }
}

Aber du kannst auch gerne deinen Code weiterverwenden. Dann müsstest du einfach in der auslesen-Methode die Instanzvariablen (meter, kg) ändern und kein neues BMI Objekt zurückliefern.
 

Neue Themen


Zurück
Oben