-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

看来您正在尝试解析'123+25'为浮动。所以它会给出错误。
如果用户按下'1+2-3*4'你的operator '*'. 所以它可能无法正常工作。请在此处查看有关 android计算器的一个很好的示例。

于 2013-06-23T18:30:52.947 回答
0

尝试以这种方式理解。当您单击等于时evaluate()被调用。

其中第一行就是value=Float.valueOf(display.getText().toString());
将什么转换display为浮点数。
尽管计算机能够转换第一个数字,但是当它出现并读取介于两者之间的运算符时。它无法转换它。因此崩溃。只是为了放心。

输入2 然后按equal我打赌它不会崩溃。

现在你能做的就是。每当调用运算符 ( + - * / ) 时。使用浮点变量并计算它并将其保存在内存中。一旦用户按下等于。显示该值。很简单。

如需更多参考,请查看simple calcomplex calc

于 2013-06-23T18:28:10.970 回答