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

これを試して :

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

プリンシパルがnullのようです。

このチェックを行うとき。

if(principal==0.00)

実は

if(principal.doubleValue() ==0.00)

そして、プリンシパルがnullであるため、これにより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ます。

したがって、それは

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

中に以前の例外のログを確認してくださいvalueOf


これは同じ問題に対する 4 番目の質問であり、Kovge's answerからコードをコピーしたところです。与えられた答えを理解しようとすれば、より多くのことを学ぶことができます。

コピー アンド ペースト アプローチのバリエーションを次に示します。

  1. null 値を明示的に無視する:

    if (principal == null && principal==0.00) {
    
  2. Doubles を使用して null 値を無視する:

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