2016-11-14 5 views
-1

Was ich tun möchte:Java - Konvertieren int number

Ich habe einen BMI-Rechner (Formel = (KG * KG)/M) Die Eingabe erfolgt zB 186, aber ich erhalte eine Fehlermeldung, wenn 1,86 Einfügen (Für in Metern Höhe)

java.lang.NumberFormatException: For input string: "1.86"

ist hier mein Code:

if (txtHeight.getText().length() > 0 && txtWeight.getText().length() > 0){ 
     height = Integer.parseInt(txtHeight.getText()); 
     heightsqr = (int) Math.pow(height, 2); 
     mass = Integer.parseInt(txtWeight.getText()); 
     bmi = (heightsqr/ mass); 
     lblBmi.setText("Current BMI : " + Integer.toString(bmi)); 
     } 
     else{ 
      JOptionPane.showMessageDialog(this, "Please enter your weight in KG and your Height in M"); 
     } 

Es ist eine ziemlich grundlegende Fehler, die ich kann nicht zu beheben nur scheinen

+3

Mögliche Duplikate von [Was ist eine NumberFormatException und wie kann ich sie beheben?] (Http://stackoverflow.com/questions/39849984/what-is-a-numberformatexception-and-how-can-i-fix- it) – xenteros

+0

Verwenden Sie double statt int – Jobin

+0

Ich denke, Sie brauchen ein grundlegendes Verständnis über Datentypen in Java. Schau, was ein Integer speichern könnte und welche Alternativen du hast. – smsnheck

Antwort

1

Wie die stacktrace sagt, kann man nicht 1.86 zu int konvertieren. Warum? weil es ein double ist.

Versuch:

mass = Double.parseDouble(txtWeight.getText()); 

In Java, wir Typen haben. int kann nur ganze Zahlen speichern. Reale Zahlen können in float s und double s gespeichert werden, aber denken Sie daran, dass Sie die Genauigkeit verlieren können.

Ich kenne nicht Ihren ganzen Code, also kann ich Ihnen nicht sagen, was ist der Typ von mass. Falls Sie die folgende irgendwo in Ihrem Code haben:

int mass; 

Änderung es zu:

double mass; 

einige zufällige Gedanken:
Wie Sie bereits dort zu sehen ist, besteht die Möglichkeit, dass die Exception wird geworfen werden. Es passiert, abhängig von Benutzereingaben, glaube ich. In Java haben wir einen Mechanismus zum Sichern. Es ist ein try-catch Block. Es kann auf die folgende Art und Weise zum Beispiel verwendet werden:

try { 
    mass = Double.parseDouble("1,86"); 
} catch (NumberFormatException e) { 
    //somehow notify user that he has mistaken and work it out according to your business logic. 
} 

I this Tutorial Lesen wird dringend empfohlen, die ich What is a NumberFormatException and how can I fix it auf StackOverflow Frage zur Verfügung gestellt haben.

+0

Danke, ich dachte, ich musste die Benutzereingabe abrufen und formatieren, es ist eigentlich einfach. Vielen Dank!! –

+0

@ JacquesNaudé, wenn es hilfreich ist, bitte markieren Sie es als eine Lösung, indem Sie auf ein graues Häkchen unter der Antwort Punktzahl klicken. – xenteros

+0

danke nochmal. Ebenfalls; sollte gewesen sein * bmi = (Masse/Höhen); * anstelle von * bmi = (heightqr/Masse); * –

-1

Sie versuchen, ein Double in ein int zu konvertieren. Das verursacht den Fehler. Wenn Sie es beheben möchten, sollten Sie entweder nur Ganzzahlen akzeptieren oder nur Doppel. Ansonsten benötigen Sie 2 if-Anweisungen. Die Konvertierung in double sieht wie folgt aus: height = Double.parseDouble(txtHeight.getText());

0

Ein Integer ist ein nicht-dezimaler Wert, daher ist 1,86 ungültig.

versuchen, es in eine Double Umwandlung: Double.parseDouble(txtHeight.getText());