package com.example.myapplication; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private TextView resultTextView; private StringBuilder expression; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); resultTextView = findViewById(R.id.resultTextView); expression = new StringBuilder(); } public void onButtonClick(View view) { Button button = (Button) view; String buttonText = button.getText().toString(); expression.append(buttonText); resultTextView.setText(expression.toString()); } public void onOperatorClick(View view) { Button button = (Button) view; String operator = button.getText().toString(); expression.append(" ").append(operator).append(" "); resultTextView.setText(expression.toString()); } public void onClearClick(View view) { expression.setLength(0); resultTextView.setText(""); } public void onEqualsClick(View view) { String[] parts = expression.toString().split(" "); if (parts.length != 3) { resultTextView.setText("Invalid expression"); return; } double operand1 = Double.parseDouble(parts[0]); double operand2 = Double.parseDouble(parts[2]); String operator = parts[1]; double result = 0; switch (operator) { case "+": result = operand1 + operand2; break; case "-": result = operand1 - operand2; break; case "*": result = operand1 * operand2; break; case "/": if (operand2 != 0) { result = operand1 / operand2; } else { resultTextView.setText("Division by zero"); return; } break; default: resultTextView.setText("Invalid operator"); return; } resultTextView.setText(String.valueOf(result)); expression.setLength(0); } }整段代码的逐行代码解析
时间: 2024-03-01 17:52:20 浏览: 88
这是一个 Android 应用程序的主要活动(Activity)的代码。以下是逐行的解析:
```java
package com.example.myapplication;
```
声明包名为 `com.example.myapplication`。
```java
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
```
导入所需的 Android 类。
```java
public class MainActivity extends AppCompatActivity {
```
定义一个名为 `MainActivity` 的公共类,并继承自 `AppCompatActivity` 类。
```java
private TextView resultTextView;
private StringBuilder expression;
```
声明两个私有变量:一个 `TextView` 类型的 `resultTextView` 和一个 `StringBuilder` 类型的 `expression`。
```java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resultTextView = findViewById(R.id.resultTextView);
expression = new StringBuilder();
}
```
重写 `onCreate()` 方法,并设置当前活动的布局为 `activity_main`。同时,初始化 `resultTextView` 和 `expression` 变量。
```java
public void onButtonClick(View view) {
Button button = (Button) view;
String buttonText = button.getText().toString();
expression.append(buttonText);
resultTextView.setText(expression.toString());
}
```
定义一个名为 `onButtonClick()` 的方法,当用户点击数字按钮时调用。该方法将按钮上的文本追加到 `expression` 变量中,并将 `resultTextView` 的文本设置为 `expression` 的字符串表示形式。
```java
public void onOperatorClick(View view) {
Button button = (Button) view;
String operator = button.getText().toString();
expression.append(" ").append(operator).append(" ");
resultTextView.setText(expression.toString());
}
```
定义一个名为 `onOperatorClick()` 的方法,当用户点击运算符按钮时调用。该方法将运算符及其前后的空格追加到 `expression` 变量中,并将 `resultTextView` 的文本设置为 `expression` 的字符串表示形式。
```java
public void onClearClick(View view) {
expression.setLength(0);
resultTextView.setText("");
}
```
定义一个名为 `onClearClick()` 的方法,当用户点击清空按钮时调用。该方法将 `expression` 变量的长度设置为 0,并将 `resultTextView` 的文本设置为空字符串。
```java
public void onEqualsClick(View view) {
String[] parts = expression.toString().split(" ");
if (parts.length != 3) {
resultTextView.setText("Invalid expression");
return;
}
double operand1 = Double.parseDouble(parts[0]);
double operand2 = Double.parseDouble(parts[2]);
String operator = parts[1];
double result = 0;
switch (operator) {
case "+":
result = operand1 + operand2;
break;
case "-":
result = operand1 - operand2;
break;
case "*":
result = operand1 * operand2;
break;
case "/":
if (operand2 != 0) {
result = operand1 / operand2;
} else {
resultTextView.setText("Division by zero");
return;
}
break;
default:
resultTextView.setText("Invalid operator");
return;
}
resultTextView.setText(String.valueOf(result));
expression.setLength(0);
}
```
定义一个名为 `onEqualsClick()` 的方法,当用户点击等于按钮时调用。该方法将 `expression` 变量的字符串表示形式按空格分割成 `parts` 字符串数组。如果 `parts` 的长度不为 3,则将 `resultTextView` 的文本设置为 `"Invalid expression"` 并返回。否则,将 `parts` 数组中的第一个和第三个元素分别转换为 `double` 类型的 `operand1` 和 `operand2`,运算符为 `parts` 数组中的第二个元素,结果为 `result`。使用 `switch` 语句根据不同的运算符计算结果。如果运算符为 `"/"`,并且 `operand2` 为 0,则将 `resultTextView` 的文本设置为 `"Division by zero"` 并返回。否则,将 `result` 的字符串表示形式设置为 `resultTextView` 的文本,并将 `expression` 变量的长度设置为 0。
阅读全文