实现计算机的简单功能

1、显示页面jsj.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="#eee"><TextViewandroid:layout_width="match_parent"android:layout_height="80dp"android:background="#42714A"android:gravity="center_vertical"android:text="Chapter03"android:textColor="#fff"android:textSize="25sp"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="简单计算机"android:gravity="center_horizontal"android:textSize="20sp"android:textColor="#000"/><TextViewandroid:id="@+id/tvresult"android:layout_width="match_parent"android:layout_height="180dp"android:background="#fff"android:layout_margin="5dp"android:text="0"android:textSize="40sp"android:textStyle="bold"android:textColor="#000"android:gravity="bottom|right"/><GridLayoutandroid:layout_marginTop="20dp"android:layout_width="match_parent"android:layout_height="wrap_content"android:columnCount="4"><Buttonandroid:id="@+id/btn_ce"style="@style/MyTextStyle"android:text="CE"/><Buttonandroid:id="@+id/btn_divide"style="@style/MyTextStyle"android:text="÷"/><Buttonandroid:id="@+id/btn_multiply"style="@style/MyTextStyle"android:text="x" /><Buttonandroid:id="@+id/btn_c"style="@style/MyTextStyle"android:text="C"/><Buttonandroid:id="@+id/btn_7"style="@style/MyTextStyle"android:text="7"/><Buttonandroid:id="@+id/btn_8"style="@style/MyTextStyle"android:text="8"/><Buttonandroid:id="@+id/btn_9"style="@style/MyTextStyle"android:text="9"/><Buttonandroid:id="@+id/btn_plus"style="@style/MyTextStyle"android:text="+"/><Buttonandroid:id="@+id/btn_4"style="@style/MyTextStyle"android:text="4"/><Buttonandroid:id="@+id/btn_5"style="@style/MyTextStyle"android:text="5"/><Buttonandroid:id="@+id/btn_6"style="@style/MyTextStyle"android:text="6"/><Buttonandroid:id="@+id/btn_minus"style="@style/MyTextStyle"android:text="—"/><Buttonandroid:id="@+id/btn_1"style="@style/MyTextStyle"android:text="1"/><Buttonandroid:id="@+id/btn_2"style="@style/MyTextStyle"android:text="2"/><Buttonandroid:id="@+id/btn_3"style="@style/MyTextStyle"android:text="3"/><Buttonandroid:id="@+id/btn_sqrt"style="@style/MyTextStyle"android:text="√"/><Buttonandroid:id="@+id/btn_reciprocal"style="@style/MyTextStyle"android:text="1/X"/><Buttonandroid:id="@+id/btn_0"style="@style/MyTextStyle"android:text="0" /><Buttonandroid:id="@+id/btn_dot"style="@style/MyTextStyle"android:text="."/><Buttonandroid:id="@+id/btn_equal"style="@style/MyTextStyle"android:text="="/></GridLayout>
</LinearLayout>
2、样式页面 style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources><style name="MyTextStyle"><item name="android:textSize">23sp</item><item name="android:layout_width">0dp</item><item name="android:layout_height">80dp</item><item name="android:layout_columnWeight">1</item></style></resources>
3、后端代码CalculatorActivity.java
package com.example.android;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.text.DecimalFormat;public class CalculatorActivity extends AppCompatActivity {private TextView tvResult; //用于显示计算结果和输入表达式的控件private String currentInput = "0"; //初始值为0private String operator = ""; //当前选择的运算符,初始为空字符串private double firstNumber = 0; //存储第一个操作数,初始值为0private boolean isNewNumber = true; //标记是否开始输入新的数字,初始为true@Override //活动创建时调用的方法protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.jsj); //活动布局界面tvResult = findViewById(R.id.tvresult); //获取对象int[] buttonIds = {R.id.btn_ce, R.id.btn_divide, R.id.btn_multiply, R.id.btn_c,R.id.btn_7, R.id.btn_8, R.id.btn_9, R.id.btn_plus,R.id.btn_4, R.id.btn_5, R.id.btn_6, R.id.btn_minus,R.id.btn_1, R.id.btn_2, R.id.btn_3, R.id.btn_sqrt,R.id.btn_reciprocal, R.id.btn_0, R.id.btn_dot, R.id.btn_equal}; //存储所有按钮的idfor (int id : buttonIds) { //为每个按钮设置点击事件监听器Button button = findViewById(id);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {handleButtonClick(((Button) v).getText().toString()); //调用handleButtonClick方法}});}}private void handleButtonClick(String buttonText) {switch (buttonText) {case "CE":currentInput = "0";break;case "C":currentInput = "0";operator = "";firstNumber = 0;isNewNumber = true;break; //恢复初始状态case "÷":case "x":case "+":case "—":if (!operator.isEmpty()) {calculateResult(); //如果存在运算符,调用calculateResult方法}operator = buttonText;firstNumber = Double.parseDouble(currentInput);isNewNumber = true;break;case "=": //调用calculateResult方法计算结果,清空operatorcalculateResult();operator = "";isNewNumber = true;break;case "√":double sqrtResult = Math.sqrt(Double.parseDouble(currentInput));currentInput = formatResult(sqrtResult);break;case "1/X":if (!currentInput.equals("0")) { //分母不能为0double reciprocalResult = 1 / Double.parseDouble(currentInput);currentInput = formatResult(reciprocalResult);} else {currentInput = "错误";}break;case ".":if (isNewNumber) { //如果是新数字,currentInput设置为0currentInput = "0.";isNewNumber = false;} else if (!currentInput.contains(".")) {currentInput += "."; //如果不包含.则在后面追加.}break;default:if (isNewNumber) {currentInput = buttonText;isNewNumber = false;} else {currentInput += buttonText;}break;}tvResult.setText(currentInput); //将值设置到tvResult中显示}private void calculateResult() {double secondNumber = Double.parseDouble(currentInput); //将输入内容转换成double型double result = 0;switch (operator) {case "÷":if (secondNumber != 0) { //如果除数不为0result = firstNumber / secondNumber;} else {currentInput = "错误";return;}break;case "x":result = firstNumber * secondNumber;break;case "+":result = firstNumber + secondNumber;break;case "—":result = firstNumber - secondNumber;break;}currentInput = formatResult(result); //将结果赋值给currentInput}private String formatResult(double result) { //格式化DecimalFormat decimalFormat = new DecimalFormat("#.########");return decimalFormat.format(result);}
}