最近常在慕课网看到有同学提问Android攻城狮的第一门课(入门篇)最后那个计算器的实现。所以我就抽空也写了一个计算器,不算完美,没有考虑精度丢失问题,也不支持连缀运算,但是代码思路清晰,并且无论怎么点都不会出bug。
public class MainActivity extends Activity implements OnClickListener {
// 定义0-9十个数字Button
private Button btn0...btn9;
private Button btnPoint; // .
private Button btnPlus; // +
private Button btnMinus; // -
private Button btnMultiply;// ×
private Button btnDivide; // ÷
private Button btnEqual; // =
private Button btnClear; // C, 清空显示屏
private Button btnDel; // Del, 删除一个数字或符号
private EditText etScreen; // 计算器显示屏
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findView();
setListener();
}
/** 找到View */
private void findView() {
btn0 = (Button) findViewById(R.id.btn0);
// 省略其他按钮和EditText的findView代码
}
/** 设置监听 */
private void setListener() {
btn0.setOnClickListener(this);
// 省略其他按钮的设置监听代码
}
@Override
public void onClick(View v) {
String str = etScreen.getText().toString();
Button btn = (Button) v;
switch (v.getId()) {
case R.id.btnPlus:
case R.id.btnMinus:
case R.id.btnMultiply:
case R.id.btnDivide:
str += " "+btn.getText()+" ";
break;
case R.id.btnEqual:
str = btnEqualEvent(str);
break;
case R.id.btnClear:
str = "";
break;
case R.id.btnDel:
str = btnDelEvent(str);
break;
case R.id.btnPoint:
if (!str.endsWith("."))
str += btn.getText();
break;
default:
str += btn.getText();
}
etScreen.setText(str);
}
/** btnDel 按钮事件 */
private String btnDelEvent(String str) {
if (str!=null && !"".equals(str)) {
if (str.endsWith(" ")) {
str = str.substring(0, str.length()-3);
} else {
str = str.substring(0, str.length()-1);
}
}
return str;
}
/** btnEqual 按钮事件 */
private String btnEqualEvent(String str) {
if (str==null "".equals(str) str.endsWith(" ")) return str;
if (str.contains(" ")) {
char operator;
int startSpace = str.indexOf(" ");
int endSpace = str.lastIndexOf(" ");
if (startSpace == 0) return str;
if (endSpace-startSpace > 2) {
Toast.makeText(this, "不支持连缀运算", Toast.LENGTH_SHORT).show();
return str;
} else {
operator = str.charAt(startSpace+1);
double one = Double.parseDouble(str.substring(0, startSpace));
double two = Double.parseDouble(str.substring(endSpace+1));
double result = 0;
int intResult = 0;
switch (operator) {
case '+':
result = one + two;
if (!str.contains(".")) {
intResult = (int) result;
str = intResult+"";
} else {
str = result+"";
}
break;
case '-':
result = one - two;
if (!str.contains(".")) {
intResult = (int) result;
str = intResult+"";
} else {
str = result+"";
}
break;
case 'x':
result = one * two;
if (!str.contains(".")) {
intResult = (int) result;
str = intResult+"";
} else {
str = result+"";
}
break;
case '÷':
if (two != 0d) {
result = one / two;
intResult = (int) result;
if (!str.contains(".") && result%1==0) {
str = intResult+"";
} else {
str = result+"";
}
} else {
Toast.makeText(this, "除数不可为0!", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
return str;
}
}
布局文件在这里就省略了,请参考课程视频。
点击查看更多内容
25人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦