2014-01-18 74 views
0

所以我有一个任务,我必须创建一个带有输入和输出框的BMI计算器。 我的问题是它给了我NaN作为答案。我搜索这个网站和他人,来了解一下这个问题是这样的:带GUI盒的BMI计算器

private static double input() { 
// TODO Auto-generated method stub 
return 0; 
} 

如果我改变的价值,它给了我一个号码,但不是我要找的数量。其他的一切都起作用了,只是输出的那一点让我烦恼。

import static javax.swing.JOptionPane.*; 

public class BMI_GUI { 
private static String input; 

public static void main(String[] args){ 

    double vikt; 
    double langd; 
    double bmi; 

    setInput(showInputDialog("Din vikt i kg: ")); 
    vikt = input(); 

    setInput(showInputDialog("Din längd i m (med ett komma): ")); 
    langd = input(); 

    bmi = (vikt/(langd*langd)); 
    JOptionPane.showMessageDialog(null, "Din BMI är " + bmi); 

    System.out.println("BMI Värden\n"); 
    System.out.println("Undervikt: Under 18.5"); 
    System.out.println("Normal: 18.5 - 24.9"); 
    System.out.println("Övervikt: 25 - 29.9"); 
    System.out.println("Fetma: 30 eller över"); 

    } 

    private static double input() { 
    // TODO Auto-generated method stub 
    return 0; 
    } 

    public static String getInput() { 
    return input; 
    } 

    public static void setInput(String input) { 
    BMI_GUI.input = input; 
    } 

} 
+0

你将通过'0 –

+2

“其他一切作品” weight' - 这不是真的。您实际上并未使用用户的任何输入。哎呀,你甚至没有使用'vikt'和'langd' - 你使用的只是硬编码的'weight'和'length'变量为0. –

回答

0

这里有几个问题。你不是在你的计算中引用你想要引用的变量(lengthwidth),并且你正在调用一个空的input()方法,它对你什么都不做,所以你可以完全摆脱它。方法同样适用于getInput()方法。由于您已经在输入到BMI_GUI的静态input字符串的输入中,因此只需将其解析为双精度型。这是有效的,但理想情况下,您还应该添加错误检查 - 如果输入String而不是可以解析为double的数字,该怎么办?你应该处理那个NumberFormatException - 也许重新询问用户输入的是刚刚被请求的输入。

public static void main(String[] args) { 

    double bmi = 0.0; 

    setInput(showInputDialog("Your weight in kg: ")); 
    double weight = Double.parseDouble(input); 

    setInput(showInputDialog("Your length in m (with a comma): ")); 
    double length = Double.parseDouble(input); 

    bmi = (weight/(length * length)); 
+1

谢谢,这个工作很完美。 – Catalyst

0

你可能想

private static double input() { 
    // TODO Auto-generated method stub 
    return Double.parseDouble(getInput()); 
}