Kommazahlen einscannen

King-Mathers

Mitglied
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.

Java:
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:
Java:
double dbl = Double.parseDouble(textfeld.getText().replace(',', '.'));

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

MfG
 

HimBromBeere

Top Contributor
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:
Java:
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.
 
Zuletzt bearbeitet:

FaxXer

Mitglied
Ganz einfach.
Ich würde das hier ersetzten:
Java:
 BMI = scan.next();
    kg = Integer.parseInt(BMI);

und zwar mit:

Java:
 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

Top Contributor
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^^
 

HimBromBeere

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

Wie dem auch sei, deine Berechnung
Code:
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:
Code:
 bmi = kg / (Math.pow(m, 2d);
 

King-Mathers

Mitglied
Also ich hab jetzt:

Java:
// 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:
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

Top Contributor
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

Mitglied
Falsch geraten ;)

Ausm Terminal:

Java:
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

Top Contributor
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!
Code:
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 :D))
 
Zuletzt bearbeitet:

King-Mathers

Mitglied
Und ich sage jetzt mal, probier`s mal mit dem Komma :bae:
Daaaanke :lol:
Und zack:

Java:
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

:D

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

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

King-Mathers

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

Java:
// 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
Ihr BMI beträgt:
20.72Sie haben ein Normalgewicht.
 

Ähnliche Java Themen

Neue Themen


Oben