0

我遇到了一个错误,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)

这个错误的原因可能是什么,我该如何解决?

4

4 回答 4

1

Try this :

// Declaration on top
Double principal=0.00;

Use this :

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";
}
于 2013-01-31T17:24:11.517 回答
0

似乎主体为空。

当你做这个检查。

if(principal==0.00)

它实际上是

if(principal.doubleValue() ==0.00)

这会导致 nullPointer 因为主体为空。

所以改成:

if(principal ==null)
//return or do something
else if(principal ==0.00)
于 2013-01-31T17:25:04.747 回答
0

不知道更多,很难说。我的猜测是,如果 et1.getText() == null 那么主体永远不会被初始化。

于 2013-01-31T17:15:20.813 回答
0

valueOf当您的变量期间发生异常时,principal不会设置。并且比较会抛出 NullPointerException,因为它会自动拆箱principal为不能为 null 的 double。

因此应该是

if (principal == null) {
  // error handling
} else if (principal==0.00) {

并在valueOf.


我知道这是您对同一问题的第四个问题,您只是从Kovge 的答案中复制了您的代码。如果您尝试理解给定的答案,您将学到更多。

以下是您的复制粘贴方法的一些变体:

  1. 显式忽略空值:

    if (principal == null && principal==0.00) {
    
  2. 使用 Doubles 忽略空值:

    if (Double.valueOf(0.0).equals(principal)) {
    
于 2013-01-31T17:17:42.180 回答