Android简易计算器(二)——关键逻辑讲解
程序员文章站
2024-02-27 13:45:27
...
最近在学安卓的相关知识,第一个demo做了一个简易计算器,功能仿手机上自带的计算器,没有加括号,简单的四则运算,支持长表达式运算。这次讲解每个按键中需要处理的逻辑。
数字键(btn_0~btn_9)
//按下数字函数
private void num_down(String num) {
String strEdit = txt_edit.getText().toString();
isOperateDown = false;
if (strEdit.equals("0") || Pattern.matches("^=[0-9].*", strEdit)) {
txt_edit.setText(num);
txt_result.setText("");
} else {
txt_edit.setText(strEdit + num);
}
}
- 运算符不能连续输入,所以输入一个数字后,设置运算符可以输入(
isOperateDown = false;
); - txt_edit 中为 0 或者 =8、=422此类,按下数字后,直接将 txt_edit 中替换为数字,并清空 txt_result 的内容;
- 除情况2,都是直接在 txt_edit 后加上数字。
运算符(btn_plus、btn_sub、btn_multi、btn_divide)
// 按下运算符函数
private void operator_down(String operator) {
if(!isOperateDown) {
String strEdit = txt_edit.getText().toString();
isOperateDown = true;
isDotDown = false;
if(Pattern.matches("^=[0-9].*", strEdit))
strEdit = strEdit.substring(1, strEdit.length());
txt_edit.setText(strEdit + operator);
}
}
- 以两个运算符之间为一个数字,一个数字至多只能有一个小数点(.),故按下运算符后,设置小数点可以输入(
isDotDown = false;
); - 在下一个数字输入之前,运算符不可重复输入,设置运算符不可输入(
isOperateDown = true;
); - 若 txt_edit 为 =8、=400这类 = 开头的字符串,应除去开头的 =;
- 在 txt_edit 后加入运算符。
清空键(btn_clear)
case R.id.btn_clear:
isDotDown = false;
isOperateDown = false;
txt_edit.setText("0");
txt_result.setText("");
break;
1, 清空键,即初始化所有东西(包括 isDotDown、isOperateDown、字符串)。
退格键(btn_back)
case R.id.btn_back: {
String strEdit = txt_edit.getText().toString();
int length = strEdit.length();
if (Pattern.matches("^=[0-9].*", strEdit)) {
txt_edit.setText("0");
txt_result.setText("");
} else {
if (length > 0) {
String word = strEdit.substring(length - 1, length);
if(word.equals("."))
isDotDown = false;
if(word.equals("+") || word.equals("-") || word.equals("×") || word.equals("÷"))
isOperateDown = false;
txt_edit.setText(strEdit.substring(0, length - 1));
}
}
break;
}
- 若 txt_edit 为 =8、=400这类 = 开头的字符串,按下退格键,应初始化 txt_edit和 txt_result;
- txt_edit 长度大于0,才可执行退格键;
- 一般情况下,删除 txt_edit 最后一个字符;
- 如果最后一个字符是运算符或小数点,就要设置相应变量(
isOperateDown
、isDotDown
)为可再次键入。
以上为这个简易计算器,几类按钮需要注意的逻辑和对应代码,而等于键(btn_equal)是计算器的核心功能,我会在下一篇进行介绍。