西安企云基创软件有限公司

Android开发一个简易的计算器

         基于Android做的一个练手计算器,可解析带括号的四则运算。代码如下 :
package com.example.calculator;
import java.util.Arrays;
import bsh.EvalError;
import bsh.Interpreter;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
/**
 * @author 铂金小龟 
 */
public class CalculatorActivity extends Activity implements OnClickListener{
	EditText rsText = null;  //显示器
	boolean isClear = false; //用于是否显示器需要被清理
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.calculator);
		
		//fun 功能按钮
		rsText = (EditText)findViewById(R.id.rsText);
		Button btnDel = (Button)findViewById(R.id.delete);
		Button btnPlu = (Button)findViewById(R.id.plus);
		Button btnMin = (Button)findViewById(R.id.minus);
		Button btnMul = (Button)findViewById(R.id.multiply);
		Button btnDiv = (Button)findViewById(R.id.division);
		Button btnEqu = (Button)findViewById(R.id.equ);
		Button btnTono = (Button)findViewById(R.id.tonone);
		Button btnLeft = (Button)findViewById(R.id.left);
		Button btnRight = (Button)findViewById(R.id.right);
		
		//num 数字按钮
		Button num0 = (Button)findViewById(R.id.num0);
		Button num1 = (Button)findViewById(R.id.num1);
		Button num2 = (Button)findViewById(R.id.num2);
		Button num3 = (Button)findViewById(R.id.num3);
		Button num4 = (Button)findViewById(R.id.num4);
		Button num5 = (Button)findViewById(R.id.num5);
		Button num6 = (Button)findViewById(R.id.num6);
		Button num7 = (Button)findViewById(R.id.num7);
		Button num8 = (Button)findViewById(R.id.num8);
		Button num9 = (Button)findViewById(R.id.num9);
		Button dot = (Button)findViewById(R.id.dot);
		
		//listener
		btnTono.setOnClickListener(this);
		btnLeft.setOnClickListener(this);
		btnRight.setOnClickListener(this);
		btnDel.setOnClickListener(this);
		btnPlu.setOnClickListener(this);
		btnMin.setOnClickListener(this);
		btnMul.setOnClickListener(this);
		btnDiv.setOnClickListener(this);
		btnEqu.setOnClickListener(this);
		  num0.setOnClickListener(this);
		  num1.setOnClickListener(this);
		  num2.setOnClickListener(this);
		  num3.setOnClickListener(this);
		  num4.setOnClickListener(this);
		  num5.setOnClickListener(this);
		  num6.setOnClickListener(this);
		  num7.setOnClickListener(this);
		  num8.setOnClickListener(this);
		  num9.setOnClickListener(this);
		  dot.setOnClickListener(this);
	}
	@Override
	public void onClick(View e) {
		Button btn = (Button)e;
		String exp = rsText.getText().toString();
		if(isClear &&(
			  btn.getText().equals("0")
			||btn.getText().equals("1")
			||btn.getText().equals("2")
			||btn.getText().equals("3")
			||btn.getText().equals("4")
			||btn.getText().equals("5")
			||btn.getText().equals("6")
			||btn.getText().equals("7")
			||btn.getText().equals("8")
			||btn.getText().equals("9")
			||btn.getText().equals(".")) 
		||btn.getText().equals("算数公式错误")){
			rsText.setText("");
			isClear = false;
		}
		if(btn.getText().equals("C")){
			rsText.setText("");
		}else if(btn.getText().equals("清除")){ 
			if(isEmpty(exp)) return;
			else
				rsText.setText(exp.substring(0, exp.length()-1));
		}else if(btn.getText().equals("=")){
			if(isEmpty(exp)) return;
			exp = exp.replaceAll("×", "*");
			exp = exp.replaceAll("÷", "/");
			rsText.setText(getRs(exp)); 
			isClear = false;
		}else{
			rsText.setText(rsText.getText()+""+btn.getText());
			isClear = false;
		}
		//操作完成后始终保持光标在最后一位
		rsText.setSelection(rsText.getText().length());
	}
	/***
	 * @param  exp 算数表达式
	 * @return 根据表达式返回结果
	 */
	private String getRs(String exp){
			Interpreter bsh = new Interpreter();
	        Number result = null;
			try {
				exp = filterExp(exp);
				result = (Number)bsh.eval(exp);
			} catch (EvalError e) {
				e.printStackTrace();
				isClear = true;
				return "算数公式错误";
			}        
			exp = result.doubleValue()+"";
			if(exp.endsWith(".0"))
				exp = exp.substring(0, exp.indexOf(".0"));
			return exp;
	}
		
	/**
	 * 因为计算过程中,全程需要有小数参与,所以需要过滤一下
	 * @param exp 算数表达式
	 * @return 
	 */
	private String filterExp(String exp) {
		String num[] = exp.split("");
		String temp = null;
		int begin=0,end=0;
		 for (int i = 1; i < num.length; i++) {
			 temp = num[i];
			 if(temp.matches("[+-/()*]")){
				 if(temp.equals(".")) continue;
				 end = i - 1;  
				 temp = exp.substring(begin, end);
				 if(temp.trim().length() > 0 && temp.indexOf(".")<0)
					 num[i-1] = num[i-1]+".0";
				 begin = end + 1;
			 }
		 }
		 return Arrays.toString(num).replaceAll("[\\[\\], ]", "");
	}
	
	/***
	 * @param str
	 * @return 字符串非空验证
	 */
	private boolean isEmpty(String str){
		return (str==null || str.trim().length()==0);
	}
	
}

联系电话:13572265258、13324575128
QQ:455075912

服务宗旨

        我们为政府及企事业单位提供从管理咨询、软件定制开发、软件实施以及运营维护的全程、优势、一体化业务生态链服务体系。以业务流程梳理、优化和数据标准化为目标的管理咨询,协助企业提升管理基础。基于SCP智慧云平台的构件组装思想,以创新的“BTO+DIY”模式为客户提供可视化、快速的软件定制开发。我们为企业提供长期的软件系统运营和维护服务,持续地进行软件系统的维护、升级和完善,为客户创造长期的价值和潜在的增长(BTO:客户提需求,软件“按单生产”,量身打造业务系统;DIY:软件DIY,你的系统你做主)。