今天终于把源代码写出来了,刚开始时还以为一下就能写好,结果由于思路不清晰,逻辑判断部分多次修改才做出大致效果。
我总结一下我这次学习的所得经验:
1.在计算结果前先不要转换为数值,保持为字符串,因为计算器如果要输入100,按照计算器的输入规则,我们是先按1,再按0,再按0,如果输出的是数值,1+0+0结果为1,如果输出的是字符串“1”+“0”+“0”结果才能为“100”。
2.OnClick部分我使用switch语句根据按钮的ID来判断哪个按钮按下,代码的效率提高了不少。
3.大家有没有看到我绑定控件和设定监听的代码非常冗余,后来我网上参考别人代码时发现用数组加for循环的话代码能一下子减少很多。
4.怎样判断一个数是否已经输入完成非常重要,我这里是通过运算符和等号来判断数值已输入完成。
计算器源代码:
public class MainActivity extends Activity implements OnClickListener{
Button btn0,btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn_jia,btn_jian,btn_cheng,btn_chu,btn_dian,btn_deng;
EditText eT;
//flag判断按了哪个运算符,flag1判断等号是否按下
int flag=-2,flag1=0;
//保存第一第二个数值
String result1="",result2="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn0 = (Button) findViewById(R.id.btn0);
btn1 = (Button) findViewById(R.id.btn1);
btn2 = (Button) findViewById(R.id.btn2);
btn3 = (Button) findViewById(R.id.btn3);
btn4 = (Button) findViewById(R.id.btn4);
btn5 = (Button) findViewById(R.id.btn5);
btn6 = (Button) findViewById(R.id.btn6);
btn7 = (Button) findViewById(R.id.btn7);
btn8 = (Button) findViewById(R.id.btn8);
btn9 = (Button) findViewById(R.id.btn9);
btn_jia = (Button) findViewById(R.id.btn_jia);
btn_jian = (Button) findViewById(R.id.btn_jian);
btn_cheng = (Button) findViewById(R.id.btn_cheng);
btn_chu = (Button) findViewById(R.id.btn_chu);
btn_deng = (Button) findViewById(R.id.btn_deng);
btn_dian = (Button) findViewById(R.id.btn_dian);
eT = (EditText) findViewById(R.id.eT);
btn0.setOnClickListener(this);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
btn5.setOnClickListener(this);
btn6.setOnClickListener(this);
btn7.setOnClickListener(this);
btn8.setOnClickListener(this);
btn9.setOnClickListener(this);
btn_jia.setOnClickListener(this);
btn_jian.setOnClickListener(this);
btn_cheng.setOnClickListener(this);
btn_chu.setOnClickListener(this);
btn_dian.setOnClickListener(this);
btn_deng.setOnClickListener(this);
}
//根据flag选择哪种运算
private double sum(double num1,double num2){
double a =0;
if(flag == 1){
a=num1+num2;
}
if(flag == 2){
a=num1-num2;
}
if(flag ==3){
a=num1*num2;
}
if(flag ==4){
a=num1/num2;
}
return a;
}
@Override
public void onClick(View v) {
//a用于临时存取字符串
String a;
//根据所按按钮id判断哪个按钮按下
switch(v.getId()){
case R.id.btn0:
a=eT.getText()+"0";
eT.setText(a);break;
case R.id.btn1:
a=eT.getText()+"1";
eT.setText(a);break;
case R.id.btn2:
a=eT.getText()+"2";
eT.setText(a);break;
case R.id.btn3:
a=eT.getText()+"3";
eT.setText(a);break;
case R.id.btn4:
a=eT.getText()+"4";
eT.setText(a);break;
case R.id.btn5:
a=eT.getText()+"5";
eT.setText(a);break;
case R.id.btn6:
a=eT.getText()+"6";
eT.setText(a);break;
case R.id.btn7:
a=eT.getText()+"7";
eT.setText(a);break;
case R.id.btn8:
a=eT.getText()+"8";
eT.setText(a);break;
case R.id.btn9:
a=eT.getText()+"9";
eT.setText(a);break;
case R.id.btn_dian:
a=eT.getText()+".";
eT.setText(a);break;
case R.id.btn_jia:
flag=1;
result1=eT.getText().toString();
eT.setText("");
break;
case R.id.btn_jian:
flag=2;
result1=eT.getText().toString();
eT.setText("");
break;
case R.id.btn_cheng:
flag=3;
result1=eT.getText().toString();
eT.setText("");
break;
case R.id.btn_chu:
flag=4;
result1=eT.getText().toString();
eT.setText("");
break;
case R.id.btn_deng:flag1=1;break;
default:break;
}
if(flag1==1){
result2=eT.getText().toString();
//转换为数值才能运算
double num1 = Double.parseDouble(result1);
double num2 = Double.parseDouble(result2);
eT.setText(sum(num1,num2)+"");
flag1=0;
}
}
}