在Android studio中的MainAcvity.java里面写一个能实现加减乘除,连续加减,小数点和0在空的情况下只能点一次,不考虑加减乘除的运算优先级从左到右依次计算,0不能做被除数用try catt捕获异常的计算器,给出每行代码的详细解释
时间: 2023-06-10 12:09:10 浏览: 107
android 计算器 demo 可以实现连续加减乘除运算
5星 · 资源好评率100%
好的,下面是代码实现及详细解释:
```java
public class MainActivity extends AppCompatActivity {
private TextView resultView; // 显示结果的文本框
private String currentNumber = ""; // 当前输入的数字
private String currentOperator = ""; // 当前的运算符
private String lastOperator = ""; // 上一个运算符
private double result = 0.0; // 运算结果
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 绑定UI组件
resultView = findViewById(R.id.result_view);
// 绑定数字按钮
Button zeroButton = findViewById(R.id.zero_button);
Button oneButton = findViewById(R.id.one_button);
Button twoButton = findViewById(R.id.two_button);
Button threeButton = findViewById(R.id.three_button);
Button fourButton = findViewById(R.id.four_button);
Button fiveButton = findViewById(R.id.five_button);
Button sixButton = findViewById(R.id.six_button);
Button sevenButton = findViewById(R.id.seven_button);
Button eightButton = findViewById(R.id.eight_button);
Button nineButton = findViewById(R.id.nine_button);
Button dotButton = findViewById(R.id.dot_button);
// 绑定运算符按钮
Button plusButton = findViewById(R.id.plus_button);
Button minusButton = findViewById(R.id.minus_button);
Button multiplyButton = findViewById(R.id.multiply_button);
Button divideButton = findViewById(R.id.divide_button);
Button equalButton = findViewById(R.id.equal_button);
// 设置数字按钮的点击事件监听器
zeroButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("0");
}
});
oneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("1");
}
});
twoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("2");
}
});
threeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("3");
}
});
fourButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("4");
}
});
fiveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("5");
}
});
sixButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("6");
}
});
sevenButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("7");
}
});
eightButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("8");
}
});
nineButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber("9");
}
});
dotButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
appendNumber(".");
}
});
// 设置运算符按钮的点击事件监听器
plusButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setOperator("+");
}
});
minusButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setOperator("-");
}
});
multiplyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setOperator("*");
}
});
divideButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setOperator("/");
}
});
equalButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
calculate();
}
});
}
/**
* 追加数字到当前数字串中
*
* @param number 要追加的数字
*/
private void appendNumber(String number) {
// 在空的情况下,小数点和0只能点一次
if (currentNumber.isEmpty() && (number.equals(".") || number.equals("0"))) {
return;
}
// 连续点小数点只能有一个
if (number.equals(".") && currentNumber.contains(".")) {
return;
}
// 追加数字
currentNumber += number;
// 更新结果文本框
resultView.setText(currentNumber);
}
/**
* 设置当前的运算符
*
* @param operator 要设置的运算符
*/
private void setOperator(String operator) {
// 如果当前数字串为空,不允许设置运算符
if (currentNumber.isEmpty()) {
return;
}
// 如果当前有上一个运算符,则先计算上一个运算符的结果
if (!lastOperator.isEmpty()) {
calculate();
}
// 设置当前运算符
currentOperator = operator;
// 将当前数字串转换为运算结果
result = Double.parseDouble(currentNumber);
// 清空当前数字串
currentNumber = "";
// 记录上一个运算符
lastOperator = currentOperator;
}
/**
* 计算结果
*/
private void calculate() {
// 如果当前数字串为空,不允许计算
if (currentNumber.isEmpty()) {
return;
}
// 将当前数字串转换为数字
double number = Double.parseDouble(currentNumber);
try {
// 根据当前的运算符,计算结果
switch (currentOperator) {
case "+":
result += number;
break;
case "-":
result -= number;
break;
case "*":
result *= number;
break;
case "/":
if (number == 0) {
throw new Exception("除数不能为0");
}
result /= number;
break;
}
// 将结果显示出来
resultView.setText(String.valueOf(result));
} catch (Exception e) {
// 捕获除数为0的异常
resultView.setText("Error");
}
// 清空当前数字串
currentNumber = "";
// 记录上一个运算符
lastOperator = currentOperator;
// 清空当前运算符
currentOperator = "";
}
}
```
代码解释:
1. 首先,我们定义了一些成员变量用于记录状态,如当前输入的数字、当前的运算符、上一个运算符、运算结果等。
2. 在 `onCreate` 方法中,我们通过 `findViewById` 方法绑定了 UI 组件,并分别设置了数字按钮和运算符按钮的点击事件监听器。
3. 在数字按钮的点击事件监听器中,我们调用了 `appendNumber` 方法,将点击的数字追加到当前数字串中。
4. 在运算符按钮的点击事件监听器中,我们调用了 `setOperator` 方法,设置当前的运算符,并在有上一个运算符的情况下先计算上一个运算符的结果。
5. 在 `appendNumber` 方法中,我们对输入的数字进行了一些限制:在空的情况下,小数点和0只能点一次;连续点小数点只能有一个。然后,我们将数字追加到当前数字串中,并更新结果文本框。
6. 在 `setOperator` 方法中,我们首先判断当前数字串是否为空,如果是,则不允许设置运算符。然后,如果当前有上一个运算符,则先计算上一个运算符的结果。接着,我们将当前运算符设置为要设置的运算符,将当前数字串转换为运算结果,清空当前数字串,并记录上一个运算符。
7. 在 `calculate` 方法中,我们首先判断当前数字串是否为空,如果是,则不允许计算。然后,我们将当前数字串转换为数字,并根据当前的运算符计算结果。在除数为0的情况下,我们使用 `try` `catch` 结构捕获异常,然后将错误信息显示在结果文本框中。最后,我们清空当前数字串,记录上一个运算符,清空当前运算符。
阅读全文