按照慕课网一步一步做的,但是做完之后存在一个问题,就是如果已经输入了一个运算符号,继续输入一个运算符号,后输入的那一个并不会将原来的那个符号覆盖,所以就会运算出错。请问有什么方法解决?(我尝试通过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("");
}
}
}