Java 不返回任何内容而不返回NaN

Java 不返回任何内容而不返回NaN,java,android,Java,Android,我正在创建一个计算体重指数的简单应用程序,我正在努力解决一个小问题。我有两个编辑文本字段,只允许键入数字。关键是当其中一个文本字段为空时,应用程序将生成一条toast消息,而不显示任何内容。我写了一个if语句来检查编辑文本是否为空,如果不是为了进一步计算。 所有这些都可以正常工作,但我需要输入return语句,androidstudio建议我编写“return0”;我也这样做了。 这是负责计算的代码: /// parse input value from edittext field into

我正在创建一个计算体重指数的简单应用程序,我正在努力解决一个小问题。我有两个编辑文本字段,只允许键入数字。关键是当其中一个文本字段为空时,应用程序将生成一条toast消息,而不显示任何内容。我写了一个if语句来检查编辑文本是否为空,如果不是为了进一步计算。 所有这些都可以正常工作,但我需要输入return语句,androidstudio建议我编写“return0”;我也这样做了。 这是负责计算的代码:

/// parse input value from edittext field into double type
private double weight() {
    EditText weightInput = (EditText) findViewById(R.id.weight_input);
    String sWeightInput = weightInput.getEditableText().toString();
    if (sWeightInput.matches("")){
        Toast.makeText(this, R.string.noweight, Toast.LENGTH_SHORT).show();
    } else {
        String weight = sWeightInput;
        double weightTyped = Double.parseDouble(weight);
        return  weightTyped;
    }
     return 0;
}

private double heigh() {
    EditText heightInput = (EditText) findViewById(R.id.height_input);
    String sHightInput = heightInput.getEditableText().toString();
    if (sHightInput.matches("")){
        Toast.makeText(this, R.string.noheight, Toast.LENGTH_SHORT).show();
    } else {
        String height = sHightInput;
        double heightTyped = Double.parseDouble(height);
        heightTyped = heightTyped / 100;
        heightTyped = heightTyped * heightTyped;
        return heightTyped;
    }
    return 0;
}

//make calculations and return the output value
public void makeCalculations(View view){
    double result = weight() / heigh();
    String message = String.valueOf(result);
    TextView bmiSummaryTextView = (TextView) findViewById(R.id.bmi_calculation);
    bmiSummaryTextView.setText(message);
}


总之,我想做的就是不显示任何内容,而显示NaN(不是数字)

返回一个非原语的
Double
而不是
Double
,您将能够使用
null
作为值。但请务必检查此值,否则您将遇到
NullPointerException


或者,您可以考虑使用optionals,但由于您使用的是Android,因此可能需要一个外部库(除非您的最低SDK版本足够高,否则您可以使用Java 8的可选版本)。

问题可能在于,如果在您的计算中
weight()/height
height为0,它输出NaN,因为它是无穷大

同时把你的
返回0Toast.makeText()
之后的code>。AS抱怨,因为在
if
分支中没有返回值

if (sHightInput.matches("")){
    Toast.makeText(this, R.string.noheight, Toast.LENGTH_SHORT).show();
    return 0;
}
也许这也能帮助你避免被零除

public void makeCalculations(View view) {
    String message = "Invalid input!";
    if (weight() > 0 && height() > 0) {
        double result = weight() / heigh();
        String message = String.valueOf(result);
    }
    TextView bmiSummaryTextView = (TextView) findViewById(R.id.bmi_calculation);
    bmiSummaryTextView.setText(message);
}

makeCalculations
中,在进行计算之前检查重量或高度是否为零。您提供的代码根本不起作用,它在放入TextView bmisumarytextView=(TextView)findViewById(R.id.bmi\u计算)后起作用;BMISumaryTextView.setText(消息)从if语句插入大括号。无论如何,谢谢你,现在它工作了!