如果变量为null,则公式失败

时间:2014-09-22 10:52:20

标签: java android

如果存在null变量,我的浮点公式将无法运行。 IE如果其中一个输入变量为null,则TextView中不显示显示结果的结果。

据我所知,有两个解决方案。

如果它们为null,则将null EditTexts设置为0

if (charisma == null) {
        charisma.setText(0);
    } else if (charisma != null) {
        charisma.setText(getcharisma);
    }

另一个忽略等式中的空变量:

try {
        float FP = Float.parseFloat(pref.getString("fp", ""));
        float CHR = Float.parseFloat(charismafpvalue.getText().toString());
        float PER = Float.parseFloat(persuasionfpvalue.getText().toString());
        float ELI = Float.parseFloat(elicitationfpvalue.getText().toString());
        float AML = Float.parseFloat(animalhandlingfpvalue.getText().toString());

        if (charismafpvalue == null) {
            fpr.setText(Float.toString(FP - (PER + ELI + AML)));    
        } else if (charismafpvalue != null) {
            fpr.setText(Float.toString(FP - (CHR + PER + ELI + AML)));
        }



    }
    catch (NumberFormatException ignore) {}

问题是我的这两个代码都无法运行。如果值为null,则值不会设置为0,并且尽管if() {} else if() {}代码,公式仍无法运行。

有哪些建议可以更好地处理此问题?以及如何实现它?

4 个答案:

答案 0 :(得分:1)

解决此问题的一种简洁方法是使用Apache Commons NumberUtils#toFloat(String str, float defaultValue)方法:

float chr = NumberUtils.toFloat(charismafpvalue.getText().toString(), 0.0f);
...

如果转换失败,这会将chr设置为默认值,因此也不需要try-catch

答案 1 :(得分:0)

改进你的字符串验证。

if (charismafpvalue != null && ! charismafpvalue.isEmpty()) {
  // doSomething
}

答案 2 :(得分:0)

Null无法转换为Float,因此您首先需要检查

      if(charismafpvalue !=null && charismafpvalue.getText().toString()!=null && !charismafpvalue.getText().equals(""))

与其他观点类似

答案 3 :(得分:0)

您可以使用

Float.valuOf(String s) 

返回" s"的浮点表示。如果有的话,或者如果" s"一片空白。像这样:

try
{
    float someFloat = Float.valueOf(someString);
}
catch(NumberFormatException nfe)
{
}
catch(NullPointerException npe)
{
}
finally {}

更多信息here

当然,这是为了完整性。空检查始终是赢家!而Keppil的答案也非常好:)

希望这有帮助