-1

アプリの完全な入力と出力を表示したいと考えています。

例えば:

2+2=4計算機で「=」をクリックした後に表示する必要があります。

私の問題は、アプリが予期せず終了することです。

package com.scientific.calculator;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ToggleButton;

public class Calculator extends Activity{

    EditText display;
    Button btn,btnop,add,sub,mul,div;
    ToggleButton shift;
    String operator,result;
    float value=0;
    Character op = 'q';

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calculator);
        display = (EditText)findViewById(R.id.etDisplay);
        shift = (ToggleButton)findViewById(R.id.tbShift);
    }

    public void set_number(View v) {
        // TODO Auto-generated method stub
        btn = (Button)findViewById(v.getId());
        result = display.getText().toString();
        display.setText(result+btn.getText().toString());
    }

     public void btnplusclicked(View v){
           perform(v);
           op = '+';

          }

          public void btnminusclicked(View v){
           perform(v);
             op = '-';

          }
          public void btndivideclicked(View v){
           perform(v);
           op = '÷';

          }
          public void btnmulticlicked(View v){
           perform(v);
           op = '×';

          }

          public void btnequalClicked(View v){
              evaluate();

          }

          public void perform(View v) {
                // TODO Auto-generated method stub
                btnop=(Button)findViewById(v.getId());
                result=display.getText().toString();
                operator=btnop.getText().toString();
                display.setText(result+operator);
               }
                  private void evaluate() {
                // TODO Auto-generated method stub
                      value=Float.valueOf(display.getText().toString());
                if(op == '+')
                 value=Float.valueOf(display.getText().toString())+value;
                else if(op == '-')
                    value=Float.valueOf(display.getText().toString())-value;
                else if(op == '/')
                    value=Float.valueOf(display.getText().toString())/value;
                else if(op == '*')
                    value=Float.valueOf(display.getText().toString())*value;

                display.setText(String.valueOf(value));
               }


}
4

2 に答える 2

0

このように理解してみてください。クリックすると等号evaluate()が呼び出されます。

最初の行は、何を Float にvalue=Float.valueOf(display.getText().toString());
変換しています。 コンピューターは最初の数字を変換することができますが、それが来て間にオペレーターを読み取ります。それを変換することはできません。したがって、クラッシュ。安心してください。display

2 と入力してから押しequalてください。きっとクラッシュしません。

今、あなたができることはどちらかです。演算子 ( + - * / ) が呼び出されるたびに。float 変数を使用して計算し、メモリに保持します。ユーザーが [等しい] を押したら。その値を表示します。そのままでシンプル。

詳細については、単純な計算または複雑な計算をご覧ください

于 2013-06-23T18:28:10.970 に答える
0

'123+25'floatに解析しようとしているようです。したがって、エラーが発生します。
そして、ユーザー'1+2-3*4'があなたのoperator '*'. そのため、正常に動作しない場合があります。Android用電卓の良い例については、こちらをご覧ください..

于 2013-06-23T18:30:52.947 に答える