Android Studio设计简易计算器/.不闪退的代码
时间: 2023-11-10 20:16:01 浏览: 116
以下是一个简易的计算器的实现,使用 Java 和 Android Studio:
布局文件 `activity_main.xml`:
```xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/result_textview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="0"
android:textSize="32sp"
android:textAlignment="center"
android:padding="16dp"
android:background="@android:color/darker_gray"
android:textColor="@android:color/white"/>
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/result_textview"
android:columnCount="4"
android:rowCount="5"
android:padding="16dp">
<Button
android:id="@+id/button_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="1"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="2"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="3"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_divide"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="/"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="4"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="5"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="6"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_multiply"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="*"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="7"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="8"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="9"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_minus"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="-"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_clear"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="C"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="0"
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_equal"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="="
android:textSize="24sp"
android:layout_columnWeight="1"/>
<Button
android:id="@+id/button_plus"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="+"
android:textSize="24sp"
android:layout_columnWeight="1"/>
</GridLayout>
</RelativeLayout>
```
Java 代码 `MainActivity.java`:
```java
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 implements View.OnClickListener {
private TextView resultTextView;
private String operand1;
private String operator;
private String operand2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resultTextView = findViewById(R.id.result_textview);
Button button1 = findViewById(R.id.button_1);
Button button2 = findViewById(R.id.button_2);
Button button3 = findViewById(R.id.button_3);
Button button4 = findViewById(R.id.button_4);
Button button5 = findViewById(R.id.button_5);
Button button6 = findViewById(R.id.button_6);
Button button7 = findViewById(R.id.button_7);
Button button8 = findViewById(R.id.button_8);
Button button9 = findViewById(R.id.button_9);
Button button0 = findViewById(R.id.button_0);
Button buttonClear = findViewById(R.id.button_clear);
Button buttonPlus = findViewById(R.id.button_plus);
Button buttonMinus = findViewById(R.id.button_minus);
Button buttonMultiply = findViewById(R.id.button_multiply);
Button buttonDivide = findViewById(R.id.button_divide);
Button buttonEqual = findViewById(R.id.button_equal);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
button4.setOnClickListener(this);
button5.setOnClickListener(this);
button6.setOnClickListener(this);
button7.setOnClickListener(this);
button8.setOnClickListener(this);
button9.setOnClickListener(this);
button0.setOnClickListener(this);
buttonClear.setOnClickListener(this);
buttonPlus.setOnClickListener(this);
buttonMinus.setOnClickListener(this);
buttonMultiply.setOnClickListener(this);
buttonDivide.setOnClickListener(this);
buttonEqual.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button_0:
handleNumberInput("0");
break;
case R.id.button_1:
handleNumberInput("1");
break;
case R.id.button_2:
handleNumberInput("2");
break;
case R.id.button_3:
handleNumberInput("3");
break;
case R.id.button_4:
handleNumberInput("4");
break;
case R.id.button_5:
handleNumberInput("5");
break;
case R.id.button_6:
handleNumberInput("6");
break;
case R.id.button_7:
handleNumberInput("7");
break;
case R.id.button_8:
handleNumberInput("8");
break;
case R.id.button_9:
handleNumberInput("9");
break;
case R.id.button_plus:
handleOperatorInput("+");
break;
case R.id.button_minus:
handleOperatorInput("-");
break;
case R.id.button_multiply:
handleOperatorInput("*");
break;
case R.id.button_divide:
handleOperatorInput("/");
break;
case R.id.button_clear:
handleClearInput();
break;
case R.id.button_equal:
handleEqualInput();
break;
}
}
private void handleNumberInput(String number) {
if (operator == null) {
if (operand1 == null) {
operand1 = number;
} else {
operand1 += number;
}
resultTextView.setText(operand1);
} else {
if (operand2 == null) {
operand2 = number;
} else {
operand2 += number;
}
resultTextView.setText(operand2);
}
}
private void handleOperatorInput(String op) {
if (operand1 != null && operand2 != null) {
handleEqualInput();
}
operator = op;
}
private void handleClearInput() {
operand1 = null;
operand2 = null;
operator = null;
resultTextView.setText("0");
}
private void handleEqualInput() {
if (operand1 != null && operand2 != null && operator != null) {
double result = 0;
double op1 = Double.parseDouble(operand1);
double op2 = Double.parseDouble(operand2);
switch (operator) {
case "+":
result = op1 + op2;
break;
case "-":
result = op1 - op2;
break;
case "*":
result = op1 * op2;
break;
case "/":
if (op2 != 0) {
result = op1 / op2;
}
break;
}
operand1 = String.valueOf(result);
operand2 = null;
operator = null;
resultTextView.setText(String.valueOf(result));
}
}
}
```
这个计算器可以支持加减乘除四种运算,以及清空和计算结果。需要注意的是,这个计算器的计算方式是将运算符和两个数字分别存储在三个字符串变量中,当用户点击等号时才进行计算。
阅读全文