# Kommazahlen einscannen



## King-Mathers (9. Jan 2012)

Hallo erstmal, ich bin der Neue !

Im Vorraus: Ja ich habe die Forensuche genutzt und ja ich hab auch gegoogelt. Aber aufgrund meiner (noch) beschränkten Fähigkeiten im Bereich java kann ich dies wohl auch noch nicht ausnutzen, da ich nur grob weiß was ich genau brauche 

Als java-Anfänger wollte ich zuerst mal etwas Einfaches versuchen und zwar einen Body-Maß-Index-Rechner. Ich scheiter aber dadran, dass der Benutzer seine Körpergröße in m, d.h. in einer Dezimalzahl, angeben muss.

Ich hab schon Lösungen gefunden, weiß allerdings nicht, wie ich die bei mir einbinden soll.


```
import java.util.*;

public class BMI
{
    
    public static void main(String[] args)
    {
    String BMI;
    int kg, bmi, m;
        {
    Scanner scan = new Scanner(System.in);
    // Zahlen (kg und m) einscannen   
    System.out.println("Bitte geben sie ihr Körpergewicht in kg ein:");
    BMI = scan.next();
    kg = Integer.parseInt(BMI);
    System.out.println("Geben sie nun ihre Körpergröße in m ein(z.B. 1,87):");
    BMI = scan.next();
    m = Integer.parseInt(BMI);
    
    // Body-Mass-Index ausrechnen
    bmi = kg / (m)^2;
    System.out.println("Ihr BMI beträgt:  ");
    System.out.print(bmi);
        }
    }
}
```

Das hab ich schon gefunden:

```
double dbl = Double.parseDouble(textfeld.getText().replace(',', '.'));
```

Wie gesagt, weiss nicht, wo das hin muss:rtfm:

MfG


----------



## HimBromBeere (9. Jan 2012)

Also für mich sieht das so aus, als ob du eine Konsolenanwendung schreibst, dabei aber Elemente von Swing/AWT nutzen willst. Das geht erstmal nicht (konkret: Scanner ist glaub für Konsole, textfeld klingt nach awt, korrigiert mich, wenn ich irre). 

Deine Zeile müsste wahrscheinlich wie folgt lauten:

```
double dbl = Double.parseDouble(BMI.replace(',', '.'));
```

und sollte an die Stelle, wo du deine Größße in eine Integer parst (warum auch immer du das tust, damit schneidest du deine 1,87 ja auf 1m ab (selbiges gilt auch für das Gewicht)). 

Zu guter Letzt: warum verwendest du die Varaible BMI in zwei verschiedenen Kontexten, einmal als Masse [kg] und einmal als Größe [m]? Definier dafür lieber je eine Varaible vom Typ double.


----------



## FaxXer (9. Jan 2012)

Ganz einfach.
Ich würde das hier ersetzten:

```
BMI = scan.next();
    kg = Integer.parseInt(BMI);
```

und zwar mit:


```
BMI = scan.nextDouble();
```

Dazu musst du aber BMI zu einer Double Variable machen. Bzw die Variable bmi in kg oder m umbenennen, damit es unten in der Formel wieder passt.

Gruß


----------



## HimBromBeere (9. Jan 2012)

> BMI = scan.nextDouble();



Das setzt aber vorraus, dass die Zahl nicht als 1,87 eingegeben wird, sondern als 1.87. Wenn du das umgehen willst, musst du das mit dem Parsen schon machen, einfacher ist es aber, einfach vorrauszusetzen, dass der Nutzer schlau genug für die Verwendung des Punktes anstelle des Kommas ist^^


----------



## King-Mathers (9. Jan 2012)

Brombeere: Ja, mache ich. 
FaxXer: Also dann noch:


```
int kg;
    double m, bmi;
```

?


----------



## HimBromBeere (9. Jan 2012)

Mach doch kg auch als Double, oder willst du nur ganze Kilo zulassen?

Wie dem auch sei, deine Berechnung 
	
	
	
	





```
kg/m^2
```
 musst du wahrscheilich auch verändern, da der ^-Operator in Java scheinbar was anderes als die Potenz bedeutet (was, weiß ich jetzt auch nicht auf Anhieb, jedenfalls kam bei mir mit 6^2 die Zahl 4 heraus^^). Schreib stattdessen folgendes:

```
bmi = kg / (Math.pow(m, 2d);
```


----------



## King-Mathers (9. Jan 2012)

Also ich hab jetzt:


```
// Haller, 09.01.2012
import java.util.*;

public class BMI
{
    
    public static void main(String[] args)
    {
    String BMI;
    double kg, bmi, m;
        {
    Scanner scan = new Scanner(System.in);
    // Zahlen (kg und m) einscannen   
    System.out.println("Bitte geben sie ihr Körpergewicht in kg ein:");
    kg = scan.nextDouble();
    System.out.println("Geben sie nun ihre Körpergröße in m ein(z.B. 1.87):");
    m = scan.nextDouble();
    
    // Body-Mass-Index ausrechnen
    bmi = kg / (Math.pow(m, 2d));
    System.out.println("Ihr BMI beträgt:  ");
    System.out.print(bmi);
        }
    }
}
```


Jetzt kommt diese Fehlermeldung nachdem ich das Program ausführen wollte:


```
java.util.InputMismatchException
	at java.util.Scanner.throwFor(Scanner.java:909)
	at java.util.Scanner.next(Scanner.java:1530)
	at java.util.Scanner.nextDouble(Scanner.java:2456)
	at BMI.main(BMI.java:17)
```


----------



## HimBromBeere (9. Jan 2012)

Ich rate mal ins Blaue, du hast statt 1.87 (mit Punkt) 1,87 (mir Komma) eingegeben. Das war´s was ich meinte mit 





> Das setzt aber vorraus, dass die Zahl nicht als 1,87 eingegeben wird, sondern als 1.87. Wenn du das umgehen willst, musst du das mit dem Parsen schon machen, einfacher ist es aber, einfach vorrauszusetzen, dass der Nutzer schlau genug für die Verwendung des Punktes anstelle des Kommas ist^^


----------



## King-Mathers (9. Jan 2012)

Falsch geraten 

Ausm Terminal:


```
Bitte geben sie ihr Körpergewicht in kg ein:
77
Geben sie nun ihre Körpergröße in m ein(z.B. 1.87):
1.76
```


----------



## eRaaaa (9. Jan 2012)

HimBromBeere hat gesagt.:


> Ich rate mal ins Blaue, du hast statt 1.87 (mit Punkt) 1,87 (mir Komma) eingegeben. Das war´s was ich meinte mit



Und ich sage jetzt mal, probier`s mal mit dem Komma :bae:

p.s.: Und mal die API Doc lesen in dem Fall! Das ganze nutzt die eingestellte Locale!

```
scan.useLocale(Locale.ENGLISH);
```
 könnte also auch funktionieren (dann halt mit dem Punkt statt Komma! Daher ist der Code auch nicht optimal, weil es eben locale spezifisch ist! (zumindest von den Texten her ))


----------



## King-Mathers (9. Jan 2012)

eRaaaa hat gesagt.:


> Und ich sage jetzt mal, probier`s mal mit dem Komma :bae:


Daaaanke :lol:
Und zack:


```
Bitte geben sie ihr Körpergewicht in kg ein:
72
Geben sie nun ihre Körpergröße in m ein(z.B. 1.87):
1,78
Ihr BMI beträgt:  
22.724403484408533
```



Danke Himbeere, hast mir oben trotzdem gut geholfen:toll:

Jetzt muss ich nurnoch runden, aber ich denke, dass krieg ich selber hin


----------



## King-Mathers (9. Jan 2012)

Weil ihr mir so gut geholfen habt, poste ich mal mein stolzes Endergebnis:


```
// Haller, 09.01.2012
import java.util.*;

public class BMI
{
    
    public static void main(String[] args)
    {
    String BMI;
    double kg, bmi, m;
        {
    Scanner scan = new Scanner(System.in);
    // Zahlen (kg und m) einscannen   
    System.out.println("Bitte geben sie ihr Körpergewicht in kg ein:");
    kg = scan.nextDouble();
    System.out.println("Geben sie nun ihre Körpergröße in m ein(z.B. 1,87):");
    m = scan.nextDouble();
    
    // Body-Mass-Index ausrechnen
    bmi = kg / (Math.pow(m, 2d));
    bmi = Math.round(bmi*100)/100.0;
    System.out.println("Ihr BMI beträgt:  ");
    System.out.print(bmi);
    System.out.println();
    
            if (bmi<=20)
                {
                    System.out.println("Sie haben Untergewicht.");
                }
                
            if (bmi>=20 && bmi<=25)
                {
                    System.out.println("Sie haben ein Normalgewicht.");                    
                }
                
            if (bmi>=25 && bmi<=30)
                {
                    System.out.println("Sie haben Übergewicht.");
                }
                
            if (bmi>=30 && bmi<=40)
                {
                    System.out.println("Sie haben Adipositas.");
                }
                
        }
    }
}
```

 Und nochmal Dankeee



> Bitte geben sie ihr Körpergewicht in kg ein:
> 62
> Geben sie nun ihre Körpergröße in m ein(z.B. 1,87):
> 1,73
> ...


----------

