我在principal==0.0
收到错误,我不明白为什么会这样。
if(et1.getText()!=null) {
try {
principal = Double.valueOf(et1.getText().toString());
}
catch(Exception e) {
message = "Incorrect value";
}
}
// The problem is in the if statement below!
if(principal==0.00) {
message = "value cannot be zero";
title = "error";
}
我得到的错误如下:
01-31 22:21:37.700: E/AndroidRuntime(985): FATAL EXCEPTION: main
01-31 22:21:37.700: E/AndroidRuntime(985):
java.lang.NullPointerException 01-31 22:21:37.700:
E/AndroidRuntime(985): at
com.compoundinterest.MainActivity$1.onClick(MainActivity.java:65)
01-31 22:21:37.700: E/AndroidRuntime(985): at
android.view.View.performClick(View.java:2485) 01-31 22:21:37.700:
E/AndroidRuntime(985): at
android.view.View$PerformClick.run(View.java:9080) 01-31
22:21:37.700: E/AndroidRuntime(985): at
android.os.Handler.handleCallback(Handler.java:587) 01-31
22:21:37.700: E/AndroidRuntime(985): at
android.os.Handler.dispatchMessage(Handler.java:92) 01-31
22:21:37.700: E/AndroidRuntime(985): at
android.os.Looper.loop(Looper.java:123) 01-31 22:21:37.700:
E/AndroidRuntime(985): at
android.app.ActivityThread.main(ActivityThread.java:3683) 01-31
22:21:37.700: E/AndroidRuntime(985): at
java.lang.reflect.Method.invokeNative(Native Method)
导致此错误的原因是什么?如何解决?
答案 0 :(得分:1)
试试这个:
// Declaration on top
Double principal=0.00;
使用此:
EditText et1 = (EditText) findViewById(R.id.myEdit);
if(!et1.getText().toString().equals("")) {
try {
principal = Double.parseDouble(et1.getText().toString());
}
catch(Exception e) {
message = "Incorrect value";
}
}
if(principal==0.00) {
message = "value cannot be zero";
title = "error";
}
答案 1 :(得分:0)
不知道更多,很难说。我的猜测是,如果et1.getText()== null,则从不初始化principal。
答案 2 :(得分:0)
在valueOf
期间发生异常时,您的变量principal
将不会被设置。并且comparsion将抛出NullPointerException,因为它是自动取消装箱principal
到double,不能为null。
因此它应该是
if (principal == null) {
// error handling
} else if (principal==0.00) {
并检查您在valueOf
期间记录以前的例外情况。
我知道这是您遇到同样问题的第四个问题,而您刚从Kovge's answer复制了代码。如果你想了解给定的答案,你会学到更多。
以下是您的复制和粘贴方法的一些变体:
明确忽略空值:
if (principal == null && principal==0.00) {
使用双打忽略空值:
if (Double.valueOf(0.0).equals(principal)) {
答案 3 :(得分:0)
似乎校长为空。
执行此操作时。
if(principal==0.00)
实际上是
if(principal.doubleValue() ==0.00)
这导致nullPointer因为主体为空。
所以改成它:
if(principal ==null)
//return or do something
else if(principal ==0.00)