BMI Rechner erstellen für W/M

Animal-Mother

Mitglied
Hallo, bin blutiger Anfänger und versuche gerade einen BMI Rechner zu programmieren.
Bei der Aufgabenstellung, muss ich jedoch den BMI für Mann und Frau berechnen können.
Problem: Ich weiss nicht wie ich hier die Werte der Frauen mit rein implementieren kann.
Kann jemand Helfen?
Gruss Toni.
eclipse-workspace - HelloWorld_src_ch_santis_programmierenlernen_kapitel2_Aufgabe_3_7_c.java -...png
 

Anhänge

  • eclipse-workspace - HelloWorld_src_ch_santis_programmierenlernen_kapitel2_Aufgabe_3_7_c.java -...png
    eclipse-workspace - HelloWorld_src_ch_santis_programmierenlernen_kapitel2_Aufgabe_3_7_c.java -...png
    86 KB · Aufrufe: 53
Code bitte immer als Code (</> Symbol nutzen) posten und nicht als Bildschirmfoto.

Was genau ist denn das Problem? Die Berechnung ist ja erst einmal soweit korrekt.
Lediglich bei der Auswertung sind die Grenzen anders. Somit musst Du nur abfragen, ob es sich um einen Mann oder eine Frau handelt um dann die entsprechenden Werte zu nutzen.
 
ich müsste folgende Werte für Weiblich eintragen :
Java:
if  (bmi < 19) {
System.out.println("Sie sind untergewichtig!");

   } else if (bmi > 19-24) {
System.out.println("Sie haben Übergewicht!");      

   } else  {
System.out.println("Sie haben Normalgewicht!");

Nun weiss ich aber nicht wohin mit dem code und wie ich das Geschlecht deklariere.


Java:
package ch.santis.programmierenlernen.kapitel2;

import java.util.Scanner;
public class Aufgabe_3_7_c {

    public static void main(String[] args) {
        Scanner scanner = new Scanner (System.in);
       
       
        double gewicht;
        double groesse;
        double bmi;
       
        System.out.println("Geben sie Ihr Gewicht an:");
gewicht = scanner.nextDouble();

System.out.println("Geben sie Ihre Grösse  an:");
groesse = scanner.nextDouble();

bmi = gewicht / (groesse * groesse);

System.out.println("Ihr BMI ist:" + bmi);


if  (bmi < 20) {
System.out.println("Sie sind untergewichtig!");

   } else if (bmi > 25) {
System.out.println("Sie haben Übergewicht!");      

   } else  {
System.out.println("Sie haben Normalgewicht!");      

    }

}
}
 
Du musst den Anwender Fragen, ob er männlich (m) oder weiblich (w) ist. Das fragst du dann ab (z.B. mit next) um dann in n einem if dies zu prüfen und entweder das Eine oder das Andere zu machen.
 
Ein Hinweis von meinem inneren Monk 😎
Java:
// mache bitte aus:
System.out.println("Sie sind untergewichtig!");
// das hier:
System.out.println("Sie haben Untergewicht!");
// weil:
System.out.println("Sie haben Übergewicht!");    
System.out.println("Sie haben Normalgewicht!");
 
da ich wirklich erst seit letzte Woche angefangen habe zu programmieren, konnte ich mit euren gutgemeinten Antworten, nichts anfangen.
Deshalb habe ich die Aufgabe etwas umschrieben:
Java:
import java.util.Scanner;
public class Aufg_3_7_def {

    public static void main(String[] args) {
          new Aufg_3_7_def().top();
      }
      
      public void top() {
       int    gewicht          = readInt       ("Gewicht");
       double groesse          = readDouble    ("Grösse in Meter");
       char   geschlecht       = readChar1     ("Geschlecht");
       int    untergrenze = 19;
       int    uebergrenze = 24;
       double bmi = gewicht / (groesse * groesse);
       String ausgabe;
        
        
         if (geschlecht   ==  'm' ) {
             untergrenze = 20;
             uebergrenze = 25;
         }
        
         if(bmi < untergrenze) {
           ausgabe = "Untergewichtig";
         }
        
         if(bmi > uebergrenze) {
             ausgabe = "Übergewicht";
            
         } else {
             ausgabe = "Normalgewicht";
         }
        
         System.out.println(ausgabe); 
        
      }
      
    
      Scanner bmi = new Scanner(System.in);
      
      int readInt(String wert) {
          meldung(wert);
          return bmi.nextInt();
      }
      
      char readChar1(String wert) {
          meldung(wert);
          return bmi.next().charAt(0);
      }
      double readDouble(String wert) {
          meldung(wert);
          return bmi.nextDouble();
      }
      public void ausgabe(String wert) {
            System.out.println("Bitte " + wert + " eingeben:");
      }
      
      char readChar(String wert, Scanner sc) {
            meldung(wert);
            return sc.next().toLowerCase().charAt(0);
      }
      void meldung(String wert) {
        System.out.println("Bitte " + wert + " eingeben:" );
      }
}
Gäbe es eine Möglichkeit das ganze etwas knackiger zu schreiben?
Gruss
 
Also das gefällt mir so schon recht gut. Vor allem die Unterteilung in viele kleine Methoden ist super. Nur bei der Auswertung hast Du einen Fehler, denn Untergewichtig wirst Du nie bekommen können....

Das könnte man noch weiter treiben, in dem Du die Ausgabe in eine Methode packst, die die Grenzen entgegen nimmt:
Java:
public void bmiAuswerten(final double bmi, final double untergrenze, final double uebergrenze) {
         if(bmi < untergrenze) {
           ausgabe = "Untergewichtig";
         } else if(bmi > uebergrenze) {
             ausgabe = "Übergewicht";
         } else {
             ausgabe = "Normalgewicht";
         }
        
         System.out.println(ausgabe);
}

Der Aufruf wird dann zu etwas wie:
Java:
         if (geschlecht   ==  'm' ) {
             bmiAuswerten(bmi, UNTERGRENZE_MANN, UEBERGRENZE_MANN);
         } else {
             bmiAuswerten(bmi, UNTERGRENZE_FRAU, UEBERGRENZE_FRAU);
         }

Und die Konstanten werden dann natürlich noch klar definiert als public static final double ....

Das wäre eine weitere Untergliederung. Das wäre dann nur noch zu toppen von einem Objektorientierten Ansatz. Da hast Du bisher noch nicht wirklich viel. Da könnte man dann einiges mehr machen, aber das könnte hier jetzt etwas zu weit führen...
 

Zurück
Oben