Java BMI-Programm schreiben

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet
public class BMI {
    public static void main(String[] args) {
        if (args.length != 2) {
            System.out.println("usage: java BMI <m> <kg>");
            System.exit(1);
        } else {
            float l = Float.valueOf(args[0]);
            float m = Float.valueOf(args[1]);
            float bmi = m / (l * l);
            System.out.println(bmi);
        }
    }
}

Aufrufen an der Konsole:

> java BMI 1.80 75
23.14815

PooBucket 
Beitragsersteller
 15.10.2013, 12:57

kannst du mir erklären, was der code genau macht?

0
ArchEnema  15.10.2013, 13:10
@PooBucket

Er liest die Kommandozeilenparameter ein (das Array "args"), interpretiert sie als Fließkommawerte (den ersten als die Körpergröße in Metern, den zweiten als Gewicht in kg), rechnet damit den BMI aus und schreibt ihn raus. Falls nicht exakt zwei Kommandozeilenparameter angegeben sind wird ein Hinweis ausgegeben, wie es richtig wäre.

0
PooBucket 
Beitragsersteller
 15.10.2013, 13:58
@ArchEnema

ich soll das aber mit nem scanner machen.. mein Endprodukt sieht nun erstmal so aus, aber ich weiß nich wieso das falsch ist -.- ich verzweifle echt daran :D

import java.util.Scanner;

public class BMI{

public static void main (String args[]){
        char geschlecht ;
        double gewicht ;
        int groesse ;
        double bmi ;

        Scanner scan = new Scanner(System.in);

        System.out.println("Sind sie ein Mann oder eine Frau?");
        System.out.println("");
        System.out.println("Mann = m");
        System.out.println("Frau = w");
        System.out.println("");
        geschlecht = scan.nextChar();


        System.out.println("Wie groß sind sie?");
        System.out.println("");
        System.out.println("Geben Sie ihre Größe bitte in cm an.");
        System.out.println("");                                         
        groesse = scan.nextInt();

        System.out.println("Wie groß sind sie?");
        System.out.println("");
        System.out.println("Geben Sie ihr Gewicht bitte in kg an.");
        System.out.println("");
        gewicht = scan.nextDouble();

        if(geschlecht = w ){                                                                                    //berrechnet den BMI bei einer Frau
        bmi =  gewicht/((groesse/90)*(groesse/90));
        System.out.println("Ihr BMI beträgt " + bmi);
    }
        if(geschlecht = m ){                                                                                    //berrechnet den BMI bei einem Mann
        bmi = gewicht/((groesse/100)*(groesse/100));
        System.out.println("Ihr BMI beträgt " + bmi);
    }
        else{                                                                                                   //macht auf eine falsche Eingabe für "Geschlecht" aufmerksam 
        System.out.println("Bitte geben Sie entweder m oder w für Ihr Geschlecht      an!");
    }
}

}

0
ArchEnema  15.10.2013, 14:39
@PooBucket

Siehste, jetzt weißt du auch warum ich dieses Scanner-Gedöns nervtötend finde. :-p

Guck dir mal die Fehlermeldungen des Compilers an. Die sind meistens erhellend. Sowas kann jedenfalls nicht dein Ernst sein:

    if(geschlecht = w ){ 

Was ist hier w?! Du meinst "w" (ein String). Und außerdem meinst du nicht = (Zuweisungsoperator) , sondern == (Vergleichsoperator). Der aber bei Strings (weil das Objekte sind) fast immer falsch ist. Eigentlich brauchst du equals(). Sowas:

if ("w".equals(geschlecht)) {
0
ArchEnema  15.10.2013, 14:44
@ArchEnema

OK, geschlecht ist ein char, dann eben:

if ('w' == geschlecht) {
0
PooBucket 
Beitragsersteller
 16.10.2013, 10:09
@ArchEnema

nein, du hattest schon recht, 1. das "w" war ein string und 2. musste ich das wirklich mit nem "equals" machen.

der bmi rechner funktioniert nun. hier das endergebnis:

import java.util.Scanner;

public class BMI{

public static void main (String args[]){
        //String geschlecht ;
        float gewicht ;
        float groesse ;
        float bmi = 0;

        Scanner scan = new Scanner(System.in);

        System.out.println("Sind sie ein Mann oder eine Frau?");
        System.out.println("");
        System.out.println("Mann = m");
        System.out.println("Frau = w");
        System.out.println("");
        String geschlecht = scan.nextLine();
        System.out.println("");

        System.out.println("Wie groß sind sie?");
        System.out.println("");
        System.out.println("Geben Sie ihre Größe bitte in cm an.");
        System.out.println("");                                         
        String input = scan.nextLine();
        groesse = Float.valueOf( input ).floatValue(); 
        System.out.println("");

        System.out.println("Wie schwer sind sie?");
        System.out.println("");
        System.out.println("Geben Sie ihr Gewicht bitte in kg an.");
        System.out.println("");
        String input2 = scan.nextLine();
        gewicht = Float.valueOf( input2 ).floatValue();  
        System.out.println("");


        if("w".equals( geschlecht ) ) {                                               //berrechnet den BMI bei einer Frau
           bmi =  gewicht/((groesse/90)*(groesse/90));
           System.out.println("Ihr BMI beträgt " + bmi);
           System.out.println("");
           System.out.println("");


           }
        else if("m".equals( geschlecht ) ){                                           //berrechnet den BMI bei einem Mann
          bmi = gewicht/((groesse/100)*(groesse/100));
          System.out.println("Ihr BMI beträgt " + bmi);
          System.out.println("");
          System.out.println("");
        }
        else{                                                                          //macht auf eine falsche Eingabe für "Geschlecht" aufmerksam 
          System.out.println("Bitte geben Sie entweder m oder w für Ihr Geschlecht an!");
        }

        if( bmi<25  &&  bmi>18.49 ){
            System.out.println("Sie sind normalgewichtig");
        }
        else if( bmi<18.499 ){
            System.out.println("Sie sind untergewichtig");
        }
        else if( bmi>25  &&  bmi<30 ){
            System.out.println("Sie sind leicht übergewichtig");
        }
        else if( bmi<40  &&  bmi>30 ){
            System.out.println("Sie sind übergewichtig");
        }
        else if( bmi>40 && bmi<70 ){
            System.out.println("Sie sind deutlich übergewichtig");
        }
        else if( bmi>70 ){
            System.out.println("Sie sind ein fettes Schwein!");
        }

} }

0
ArchEnema  16.10.2013, 12:52
@PooBucket

Ja, jetzt ist geschlecht ein String. ;-)

 if( bmi<18.499 ){

Da schreibst du besser < 18.5. "Kleiner" heißt sowieso "ohne" die Grenze 18.5. Und dann beim nächsten Intervall >= 18.5, also "mit" der Intervallgrenze, "größer oder gleich".

Stell dir vor es käme 18.495 raus. Dein Programm würde ausgeben, dass die Person normalgewichtig UND untergewichtig sei!

Und wenn jemand den BMI 25 hat bekommt er gar keine Antwort. ;-))

1

Lass dich inspirieren (oder nicht erwischen): http://www.daniweb.com/software-development/java/threads/228198/calculating-bmi-java-code

Musst nur über Console einlesen, die Berechnung machen (ist ja nicht so schwer) und dann wieder ausgeben


PooBucket 
Beitragsersteller
 15.10.2013, 12:51

Danke, ich habe jz sowas

import java.util.Scanner;

public class BMI{

public static void main (String args[]){

        int geschlecht ;
        double gewicht ;
        int groesse ;
        double bmi ;

        Scanner scan = new Scanner(System.in);

        System.out.println("Sind sie ein Mann oder eine Frau?");

 }
}

ich will, dass eine eingabe erforderlich ist, in der man "Mann" oder "Frau" eingeben muss. Mann soll dann als

int geschlecht = 0

deklariert werden und bei der Eingabe "Frau" soll

int geschlecht = 1

sein. wie mache ich das jz, dass er den die Eingabe Mann bzw Frau in einen int umwandelt?

0
PooBucket 
Beitragsersteller
 15.10.2013, 12:52
@PooBucket

hat sich schon geändert. sieht jz so aus

String geschlecht = args[0]; double gewicht = args[1]; int groesse ; double bmi ;

        Scanner scan = new Scanner(System.in);

        System.out.println("Sind sie ein Mann oder eine Frau?");
        System.out.println("");
        System.out.println("Mann = m");
        System.out.println("Frau = w");
        System.out.println("");
        geschlecht = scan.nextString();
        System.out.println(geschlecht);

        System.out.println("Wie groß sind sie?");
        System.out.println("");
        System.out.println("Geben Sie ihre Größe bitte in cm an.");
        System.out.println("");
        groesse = scan.nextInt();
0

also, du brauchst einen Scanner oder bufferedReader , 2 variablen ein wenig Mathematik und das wars. den code schreib ich aber nicht für dich :D