代码如下:
public class MainActivity extends Activity implements View.OnClickListener {
/*
利用数组装变量,并创建button数组存放相应的变量
*/
private int[] btn = {R.id.zero, R.id.one, R.id.two, R.id.three, R.id.four, R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine};
private Button[] bnum = new Button[btn.length];
private int[] takes = {R.id.jia, R.id.jian, R.id.cheng, R.id.chu};
private Button[] take = new Button[takes.length];
private int[] btc = {R.id.dot, R.id.zf, R.id.xc, R.id.qc, R.id.tg, R.id.bai, R.id.lf, R.id.pf, R.id.fen, R.id.sum};
private Button[] btcl = new Button[btc.length];
private EditText editText;
boolean clear_flag; //用于:当已经运算出结果的时候,我们再次点击数字按钮的时候,清空屏幕的作用!
private String opt; //加减乘除通用变量
double num1, num2; //第一个值,第二个值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取输入框
editText = (EditText) findViewById(R.id.edittext);
//输入框复制空字符串
editText.setText("");
//输入框不能够输入,只能接收按钮点击事件
editText.setEnabled(false);
//利用循环遍历给每个button分类进行实例化并实现OnClickListener接口
for (int i = 0; i < btn.length; i++) {
bnum[i] = (Button) findViewById(btn[i]);
bnum[i].setOnClickListener(this);
}
for (int i = 0; i < takes.length; i++) {
take[i] = (Button) findViewById(takes[i]);
take[i].setOnClickListener(this);
}
for (int i = 0; i < btc.length; i++) {
btcl[i] = (Button) findViewById(btc[i]);
btcl[i].setOnClickListener(this);
}
}
@Override
public void onClick(View v) {
String str = editText.getText().toString(); //获取当前edittext的内容
//利用switch多分支语句
switch (v.getId()) {
case R.id.zero:
case R.id.one:
case R.id.two:
case R.id.three:
case R.id.four:
case R.id.five:
case R.id.six:
case R.id.seven:
case R.id.eight:
case R.id.nine:
case R.id.dot:
if (clear_flag) {
clear_flag = false;
str = "";
editText.setText("");
}
editText.setText(str + ((Button) v).getText());
break;
//加法
case R.id.jia: {
if (!TextUtils.isEmpty(str)) {
String str1 = editText.getText().toString();
num1 = Double.parseDouble(str1);
opt = "+";
editText.setText(opt);
break;
}
}
//减法
case R.id.jian: {
if (!TextUtils.isEmpty(str)) {
String str1 = editText.getText().toString();
num1 = Double.parseDouble(str1);
opt = "-";
editText.setText(opt);
break;
}
}
//乘法
case R.id.cheng: {
if (!TextUtils.isEmpty(str)) {
String str1 = editText.getText().toString();
num1 = Double.parseDouble(str1);
opt = "*";
editText.setText(opt);
break;
}
}
//除法
case R.id.chu: {
if (!TextUtils.isEmpty(str)) {
String str1 = editText.getText().toString();
num1 = Double.parseDouble(str1);
opt = "/";
editText.setText(opt);
break;
}
}
//消除 与清除一个功能
case R.id.xc:
clear_flag = false;
editText.setText("");
break;
//退格键
case R.id.tg:
if (clear_flag) {
clear_flag = false;
editText.setText("");
} else if (str != null && !str.equals("")) {
editText.setText(str.substring(0, str.length() - 1));
}
break;
//清除 与消除一个功能
case R.id.qc:
Toast toast = Toast.makeText(this, "与消除功能一样", Toast.LENGTH_SHORT);
toast.show();
//根计算
case R.id.lf:
if (!TextUtils.isEmpty(str)) {
String str1 = editText.getText().toString();
num1 = Double.parseDouble(str);
if (num1 < 0) {
editText.setText("负数没有平方根");
} else {
editText.setText(Math.sqrt(num1) + "");
}
break;
}
//正负计算
case R.id.zf:
if (!TextUtils.isEmpty(str)) {
String str1 = editText.getText().toString();
num1 = Double.parseDouble(str1);
if (str.length() > 0)
editText.setText(-num1 + "");
break;
}
case R.id.bai:
if (!TextUtils.isEmpty(str)) {
}
//平方计算
case R.id.pf:
if (!TextUtils.isEmpty(str)) {
String str1 = editText.getText().toString();
num1 = Double.parseDouble(str1);
editText.setText(String.valueOf(num1 * num1));
}
// 1/x计算
case R.id.fen:
if (!TextUtils.isEmpty(str)) {
String str1 = editText.getText().toString();
num1 = Double.parseDouble(str1);
editText.setText(String.valueOf(1 / num1));
}
case R.id.sum:
if (opt == "+") {
String str1 = editText.getText().toString();
num2 = Double.parseDouble(str);
editText.setText(String.valueOf(num1 + num2));
} else if (opt == "-") {
String str1 = editText.getText().toString(); //获取输入框的值
str = str.substring(1);
num2 = Double.parseDouble(str);
editText.setText(String.valueOf(num1 - num2));
} else if (opt == "*") {
String str1 = editText.getText().toString();
str = str.substring(1);
num2 = Double.parseDouble(str);
editText.setText(String.valueOf(num1 * num2));
} else if (opt == "/") {
String str1 = editText.getText().toString();
str = str.substring(1);
num2 = Double.parseDouble(str);
editText.setText(String.valueOf(num1 / num2));
}
break;
}
}
}