JACoder 2015-12-02 07:10 采纳率: 100%
浏览 2073
已结题

java制作计算器的时候同时输入两个运算符出错

按照慕课网一步一步做的,但是做完之后存在一个问题,就是如果已经输入了一个运算符号,继续输入一个运算符号,后输入的那一个并不会将原来的那个符号覆盖,所以就会运算出错。请问有什么方法解决?(我尝试通过if判断是否已经输入了运算符,如果已经输入,就把原来的截去之后再写入新的运算符,但是没有效果)

package com.example.calculator;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener{
    private Button bt0,bt1,bt2,bt3,bt4,bt5,bt6,bt7,bt8,bt9,btplus,btdiv,btdel,btclear,btmultiply,btminus,btpot,btequal;
    private EditText input;
    private boolean clear_flag;//清空标识
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt0=(Button) findViewById(R.id.btn_zero);
        bt1=(Button) findViewById(R.id.btn_one);
        bt2=(Button) findViewById(R.id.btn_two);
        bt3=(Button) findViewById(R.id.btn_three);
        bt4=(Button) findViewById(R.id.btn_four);
        bt5=(Button) findViewById(R.id.btn_five);
        bt6=(Button) findViewById(R.id.btn_six);
        bt7=(Button) findViewById(R.id.btn_seven);
        bt8=(Button) findViewById(R.id.btn_eight);
        bt9=(Button) findViewById(R.id.btn_nine);
        btplus=(Button) findViewById(R.id.btn_plus);
        btdiv=(Button) findViewById(R.id.btn_devide);
        btdel=(Button) findViewById(R.id.btn_del);
        btequal=(Button) findViewById(R.id.btn_equal);
        btclear=(Button) findViewById(R.id.btn_clear);
        btmultiply=(Button) findViewById(R.id.btn_multiply);
        btminus=(Button) findViewById(R.id.btn_minus);
        btpot=(Button) findViewById(R.id.btn_pot);
        input=(EditText) findViewById(R.id.et_input);

        bt0.setOnClickListener(this);
        bt1.setOnClickListener(this);
        bt2.setOnClickListener(this);
        bt3.setOnClickListener(this);
        bt4.setOnClickListener(this);
        bt5.setOnClickListener(this);
        bt6.setOnClickListener(this);
        bt7.setOnClickListener(this);
        bt8.setOnClickListener(this);
        bt9.setOnClickListener(this);
        btplus.setOnClickListener(this);
        btdiv.setOnClickListener(this);
        btdel.setOnClickListener(this);
        btequal.setOnClickListener(this);
        btclear.setOnClickListener(this);
        btmultiply.setOnClickListener(this);
        btminus.setOnClickListener(this);
        btpot.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onClick(View v) {
        String str=input.getText().toString();
        switch(v.getId())
        {
        case R.id.btn_one:
        case R.id.btn_two:
        case R.id.btn_three:
        case R.id.btn_four:
        case R.id.btn_five:
        case R.id.btn_six:
        case R.id.btn_seven:
        case R.id.btn_eight:
        case R.id.btn_nine:
        case R.id.btn_pot:
        case R.id.btn_zero:
            if(clear_flag){
                clear_flag=false;
                str="";
                input.setText("");
            }
            input.setText(str+((Button)v).getText());
            break;
        case R.id.btn_devide:
        case R.id.btn_plus:
        case R.id.btn_minus:
        case R.id.btn_multiply:
            if(clear_flag){
                clear_flag=false;
                str="";
                input.setText("");
            }
            input.setText(str+" "+((Button)v).getText()+" ");
            break;
        case R.id.btn_del:
            if(clear_flag){
                clear_flag=false;
                str="";
                input.setText("");
            }else if(str!=null&&!str.equals("")){
                input.setText(str.substring(0,str.length()-1));
            }
            break;
        case R.id.btn_clear:
            clear_flag=false;
            str="";
            input.setText("");
            break;
        case R.id.btn_equal:
            getResult();
            break;
        default:
        }
    }
    //运算结果
    private void getResult(){
        String exp=input.getText().toString();
        if(exp==null||exp.equals("")){
            return;
        }
        if(!exp.contains(" ")){
            return;
        }
        if(clear_flag){
            clear_flag=false;
            return;
        }
        clear_flag=true;
        double result=0;
        String s1=exp.substring(0,exp.indexOf(" "));//运算符前面的字符串
        String op=exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);//截取到的运算符
        String s2=exp.substring(exp.indexOf(" ")+3);//运算符后面的字符串
        if(!s1.equals("")&&!s2.equals("")){
            double d1=Double.parseDouble(s1);
            double d2=Double.parseDouble(s2);
            if(op.equals("+")){
                result=d1+d2;
            }else if(op.equals("-")){
                result=d1-d2;
            }else if(op.equals("×")){
                result=d1*d2;
            }else if(op.equals("÷")){
                if(d2==0){
                    result=0;
                }else{
                    result=d1/d2;
                }
            }
            if(!s1.contains(".")&&!s2.contains(".")&&!op.equals("÷")){
                int r=(int) result;
                input.setText(r+"");
            }else{
                input.setText(result+"");
            }
        }else if(!s1.equals("")&&s2.equals("")){
            input.setText(exp);
        }else if(s1.equals("")&&!s2.equals("")){
            double d2=Double.parseDouble(s2);
            if(op.equals("+")){
                result=0+d2;
            }else if(op.equals("-")){
                result=0-d2;
            }else if(op.equals("×")){
                result=0;
            }else if(op.equals("÷")){
                    result=0;
            }
            if(!s2.contains(".")){
                int r=(int) result;
                input.setText(r+"");
            }else{
                input.setText(result+"");
            }
        }else{
            input.setText("");
        }
    }
}
  • 写回答

2条回答 默认 最新

  • 李元静 HarmonyOS领域优质创作者 2015-12-02 07:23
    关注

    运算符为一个字节,在java默认的string编码中,你可以用char存储,那么不管你按多少次,总是会覆盖前面的,并不会判断。

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!