问题描述
- 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(""); } } }
解决方案
运算符为一个字节,在java默认的string编码中,你可以用char存储,那么不管你按多少次,总是会覆盖前面的,并不会判断。
解决方案二:
看了下你的思路,比如你上面的输入的值 是 String s = " 5 + ";String reg = "+ ";
if(s.endsWith(reg)) s = s.replace(reg,"");这样一定能替换掉
时间: 2024-11-05 19:38:05