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