当用户输入整数时,程序运行平稳,但当用户输入最后有小数的数字时,程序崩溃。
这些是我得到的错误:
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:458)
at java.lang.Integer.parseInt(Integer.java:499)
at BMI.main(BMI.java:11)
这是我的代码:
import javax.swing.*;
public class BMI {
public static void main(String args[]) {
int height; // declares the height variable
int weight; // declares the weight variable
String getweight;
getweight = JOptionPane.showInputDialog(null, "Please enter your weight in Kilograms"); // asks user for their weight
String getheight;
getheight = JOptionPane.showInputDialog(null, "Please enter your height in Centimeters"); // asks user for their height
weight = Integer.parseInt(getweight); // stores their weight
height = Integer.parseInt(getheight); // stores their height
double bmi; // declares the BMI variable
bmi = weight / Math.pow(height / 100.0, 2.0); // calculates the BMI
double roundbmi; // variable to round the BMI to make it more read-able
roundbmi = Math.round(bmi); // rounds the BMI
JOptionPane.showMessageDialog(null, "Your BMI is: " + roundbmi); // displays the calculated and rounded BMI
}
}
答案 0 :(得分:16)
Integer
只识别整数。如果您希望能够捕获浮点数,请使用Float.parseFloat()
或Double.parseDouble()
。
为了使答案更加完整,让我举一个快速举例说明为什么"4."
,"4.0"
和"4"
以两种不同的方式表示。前两个被认为是浮点值(因为Java只会假设您的意思是4.0
),以及它们在内存中的表示方式在很大程度上取决于您用来表示它们的数据类型 - float
或double
。
float
使用single-precision floating point standard代表4.0
,double
使用double-precision floating point standard代表4.0
。 int
代表base-2中的值4
(因此它只是2 2 )。
了解数字如何在内部存储对于开发至关重要,而不仅仅是Java。通常,建议使用Double
,因为这样可以提供更大范围的浮点数(以及更高的精度)。
答案 1 :(得分:5)
您正在解析Integers
,它不能包含小数。请改为Double
。
答案 2 :(得分:5)
您正在将输入解析为整数,其中不能包含小数点。您想将其解析为Double。