0

私のプロジェクトには、少なくとも2つのEditBoxを計算するボタンがありますが、空のままにして計算すると、クラッシュアプ​​リが発生します。

java.lang.NumberFormatException: Invalid double: ""
at java.lang.StringToReal.invalidReal(StringToReal.java:63)
at java.lang.StringToReal.parseDouble(StringToReal.java:248)
at java.lang.Double.parseDouble(Double.java:295)
at com.math.square.Level1.calculate(Level1.java:71)
at com.math.square.Level1.access$0(Level1.java:66)
at com.math.square.Level1$2.onClick(Level1.java:62)
at android.view.View.performClick(View.java:3511)
at android.view.View$PerformClick.run(View.java:14105)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

計算する前に確認するにはどうすればよいですか。空の場合は、ユーザーに警告して計算しないでください。

コード:

public class Level1 extends Activity {
    EditText amount1;
    EditText amount2;
    EditText amount3;
    EditText amount4;
    Button calculate;
    double a=0;
    double b=0;
    double c=0;
    double d=0;
    double e=0;
    double f=0;
    double g=0;
    double h=0;

    /** Called when the activity is first created. */
    @Override
      public void onCreate(Bundle savedInstanceState)
      {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.level1);

          initControls();

        findViewById(R.id.Button05).setOnClickListener(
                new OnClickListener() {
            public void onClick(View v) {
                btn05(true);
            }
        });;
      }

          private void initControls()
          {
              amount1=(EditText)findViewById(R.id.amount1);
              amount2=(EditText)findViewById(R.id.amount2);
              amount3=(EditText)findViewById(R.id.amount3);
              amount4=(EditText)findViewById(R.id.amount4);
              calculate=(Button)findViewById(R.id.calculate);
              calculate.setOnClickListener(new Button.OnClickListener()
              {
                  public void onClick
              (View  v) { calculate();}
              });
          }

        private void calculate()
          {
              a=Double.parseDouble(amount1.getText().toString());
              b=Double.parseDouble(amount2.getText().toString());
              d=Double.parseDouble(amount3.getText().toString());
              e=Double.parseDouble(amount4.getText().toString());

              /** Check Value > 0*/
              EditText amount1value = (EditText)this.findViewById(R.id.amount1);
              EditText amount2value = (EditText)this.findViewById(R.id.amount2);
              EditText amount3value = (EditText)this.findViewById(R.id.amount3);
              EditText amount4value = (EditText)this.findViewById(R.id.amount4);
              Integer nameLen = 2;

              int len = amount1value.length();
              int len2 = amount2value.length();
              int len3 = amount3value.length();
              int len4 = amount4value.length();

              if (len<nameLen) {
                  amount1value.setError(getText(R.string.blank));
                  TextView Result = (TextView)findViewById(R.id.Result);
                  Result.setText(R.string.error_character_length);
              } else 
              if (len2<nameLen) {
                  amount2value.setError(getText(R.string.blank));
                  TextView Result = (TextView)findViewById(R.id.Result);
                  Result.setText(R.string.error_character_length);
              } else 
              if (len3<nameLen) {
                  amount3value.setError(getText(R.string.blank));
                  TextView Result = (TextView)findViewById(R.id.Result);
                  Result.setText(R.string.error_character_length);
              } else 
              if (len4<nameLen) {
                  amount4value.setError(getText(R.string.blank));
                  TextView Result = (TextView)findViewById(R.id.Result);
                  Result.setText(R.string.error_character_length);
              }  

              else {

              c=a+b;
              f=d+e;
              g=a+d;
              h=b+e;

              if(c==9 && f==12 && g==8 && h==13){
                TextView Result = (TextView)findViewById(R.id.Result);
                Result.setText(R.string.correct);
              }
              else {
                TextView Result = (TextView)findViewById(R.id.Result);
                Result.setText(R.string.wrong);
              }
              }
          }

ユーザーの空白を避けるために2文字あるかどうかを確認するためのチェックを作成しましたが、これは単なる回避策です。

4

2 に答える 2

1

答えはずっと簡単です。計算を実行する前に、前にEditTextでテキストを確認してください。空の場合は、エラートーストを表示します。それ以外の場合は、計算を続行します。もう1つの注意点は、EditTextは入力タイプとして数字のみを受け入れる必要があるということです。トライキャッチの必要はありません。詳細については、開発サイトでEditTextのドキュメントを参照してください。

于 2012-04-24T21:50:58.193 に答える
0

parseDoubleメソッドをtry-catch、キャッチするで囲みますNumberFormatException。例外が発生した場合は、無効な値を入力したことをユーザーに通知し、計算を続行しないでください。

于 2012-04-24T21:18:17.163 に答える