Android学习记录 计算器(二)

今天终于把源代码写出来了,刚开始时还以为一下就能写好,结果由于思路不清晰,逻辑判断部分多次修改才做出大致效果。

我总结一下我这次学习的所得经验:

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;
		}
		
	}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值