给需要参考的同学,大家一起学习学习
import android.app.Activity;
import android.os.Bundle;
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 btn_0;
private Button btn_1;
private Button btn_2;
private Button btn_3;
private Button btn_4;
private Button btn_5;
private Button btn_6;
private Button btn_7;
private Button btn_8;
private Button btn_9;
private Button btn_point;
private Button btn_clear;
private Button btn_del;
private Button btn_jia;
private Button btn_jian;
private Button btn_cheng;
private Button btn_chu;
private Button btn_equal;
private EditText et_input;
// 输出结果后,如果再点击按钮则需要清空数据,这里需要使用到一个标识
// 也就是说当点击等于号后,下次再点击其他按钮的时候需要将原来的数据清空
boolean clear_flag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 实例化
btn_0 = (Button) findViewById(R.id.btn_0);
btn_1 = (Button) findViewById(R.id.btn_1);
btn_2 = (Button) findViewById(R.id.btn_2);
btn_3 = (Button) findViewById(R.id.btn_3);
btn_4 = (Button) findViewById(R.id.btn_4);
btn_5 = (Button) findViewById(R.id.btn_5);
btn_6 = (Button) findViewById(R.id.btn_6);
btn_7 = (Button) findViewById(R.id.btn_7);
btn_8 = (Button) findViewById(R.id.btn_8);
btn_9 = (Button) findViewById(R.id.btn_9);
btn_point = (Button) findViewById(R.id.btn_point);
btn_clear = (Button) findViewById(R.id.btn_clear);
btn_del = (Button) findViewById(R.id.btn_del);
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_equal = (Button) findViewById(R.id.btn_equal);
et_input = (EditText) findViewById(R.id.et_input);
// 监听点击事件
btn_0.setOnClickListener(this);
btn_1.setOnClickListener(this);
btn_2.setOnClickListener(this);
btn_3.setOnClickListener(this);
btn_4.setOnClickListener(this);
btn_5.setOnClickListener(this);
btn_6.setOnClickListener(this);
btn_7.setOnClickListener(this);
btn_8.setOnClickListener(this);
btn_9.setOnClickListener(this);
btn_point.setOnClickListener(this);
btn_clear.setOnClickListener(this);
btn_del.setOnClickListener(this);
btn_jia.setOnClickListener(this);
btn_jian.setOnClickListener(this);
btn_cheng.setOnClickListener(this);
btn_chu.setOnClickListener(this);
btn_equal.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String text = et_input.getText().toString();
switch (v.getId()) {
// 设置数字按钮点击事件
case R.id.btn_0:
case R.id.btn_1:
case R.id.btn_2:
case R.id.btn_3:
case R.id.btn_4:
case R.id.btn_5:
case R.id.btn_6:
case R.id.btn_7:
case R.id.btn_8:
case R.id.btn_9:
case R.id.btn_point:
if (clear_flag) {
clear_flag = false;
text = "";
et_input.setText("");
}
et_input.setText(text + ((Button) v).getText());
break;
// 设置运算按钮点击事件
case R.id.btn_jia:
case R.id.btn_jian:
case R.id.btn_cheng:
case R.id.btn_chu:
if (clear_flag) {
clear_flag = false;
}
if (text != null && !text.equals(""))
et_input.setText(text + " " + ((Button) v).getText() + " ");
break;
// 设置清除按钮点击事件
case R.id.btn_clear:
clear_flag = false;
text = "";
et_input.setText(null);
break;
// 设置删除按钮点击事件
case R.id.btn_del:
if (clear_flag) {
clear_flag = false;
text = "";
et_input.setText("");
} else if (text != null && !text.equals(""))
et_input.setText(text.substring(0, text.length() - 1));
break;
// 设置等于号按钮点击事件
case R.id.btn_equal:
getResult();
break;
}
}
/**
* 运算结果
*/
private void getResult() {
String text = et_input.getText().toString();
double result = 0;
if (clear_flag) {
clear_flag = true;
return;
}
clear_flag = true;
if (text == null || text.equals("")) {
return;
}
if (!text.contains(" ")) {
return;
}
// 运算符前的字符串
String n1 = text.substring(0, text.indexOf(" "));
// 运算符
String ysf = text.substring(text.indexOf(" ") + 1,
text.indexOf(" ") + 2);
// 运算符后的字符串
String n2 = text.substring(text.indexOf(" ") + 3);
// 两个数都为空时的运算结果
if (n1 != null && n2 != null) {
// 对数据转型后运算
double num1 = Double.parseDouble(n1);
double num2 = Double.parseDouble(n2);
if (ysf.equals("+"))
result = num1 + num2;
else if (ysf.equals("-"))
result = num1 - num2;
else if (ysf.equals("*"))
result = num1 * num2;
else if (ysf.equals("/"))
if (num2 == 0)
result = 0;
else
result = num1 / num2;
// 设置显示结果
if (!n1.contains(".") && !n2.contains(".") && !ysf.equals("/")) {
int r = (int) result;
et_input.setText(r + "");
} else {
// 判断如果输出的结果以.0结尾,就将该结果改为整数表示
if ((result + "").endsWith(".0")) {
int r = (int) result;
et_input.setText(r + "");
} else {
et_input.setText(result + "");
}
}
// 第一数不为空,第二个数为空时的运算结果
} else if (n1 != null && n2 == null) {
et_input.setText(text);
// 第一个数为空,第二个不为空时的运算结果
} else if (n1 == null && n2 != null) {
// 对数据转型后运算
double num2 = Double.parseDouble(n2);
if (ysf.equals("+"))
result = 0 + num2;
else if (ysf.equals("-"))
result = 0 - num2;
else if (ysf.equals("*"))
result = 0;
else if (ysf.equals("/"))
result = 0;
// 设置显示结果
if (!n2.contains(".")) {
int r = (int) result;
et_input.setText(r + "");
} else {
et_input.setText(result + "");
}
// 两个数都为空的时候
} else {
et_input.setText(null);
}
}
}