BMI 計算プログラムをスキャナーの使用から JOptPane の使用に変換しようとしていますが、なんらかの理由でそれを JOp に持ち込むと、数字が本当におかしくなっています。スキャナ モードでのテストでは、体重に 190、高さに 70 を使用すると、約 27 になります。
ただし、このコードを JOp に取り込むと、同じ数値で約 1.36 になります。
明らかにこれはかなり外れていますが、私はJavaが初めてで、その理由がよくわかりません..私が思いつく最良のアイデアは、文字列をダブルスに解析するときに、いくつかの余分な文字形式を取り、それを連結していることです.文字列に格納された ASCII 値を使用して、数値を完全に変更します。
Double の「valueOf」関数と「parse」関数はどちらも同じ結果をもたらします。誰でも助けることができますか?
import javax.swing.JOptionPane;
public class ComputeAndInterpretBMI
{
public static void main(String[] args)
{
/* //Original Code BloK --removed 22May2013;7892
Scanner input = new Scanner(System.in);
//prompt user to entier weight in #'s
System.out.print("Enter weight in pounds: ");
double weight = input.nextDouble();
//prompt user to enter heigh in inches
System.out.print("Enter hight in inches: ");
double height = input.nextDouble();
*/
//weight and height boxes
String inputWeight = JOptionPane.showInputDialog ("Enter the weight in pounds");
String inputHeight = JOptionPane.showInputDialog ("Enter the height in inches");
//parse strings to doubles
double weight = Double.valueOf(inputHeight);
double height = Double.valueOf(inputWeight);
final double KILOGRAMS_PER_POUND = 0.453359237; //THIS IS A CONST, NO TOUCH
final double METERS_PER_INCH = 0.0254; //ANOTHER CONST, STILL NO TOUCH
double weightInKilograms = weight * KILOGRAMS_PER_POUND;
double heightInMeters = height * METERS_PER_INCH;
double bmi = weightInKilograms / (heightInMeters * heightInMeters);
//Display the results here
/*//Original code BloK --removed 22May2013;7892
System.out.println("BMI is " + bmi);
if (bmi < 18.5)
System.out.println("underweight");
else if (bmi < 25 )
System.out.println("normal");
else if (bmi < 30 )
System.out.println("overweight");
else
System.out.println("obease");
*/
String results;
if (bmi < 18.5)
results = "underweight";
else if (bmi < 25 )
results = "normal";
else if (bmi < 30 )
results = "overweight";
else
results = "obease";
String output = "BMI is :" + bmi + "\n" + results;
JOptionPane.showMessageDialog(null, output);
}
}