当前位置:   article > 正文

android studio 简易计算器制作_android studio制作一个计算器

android studio制作一个计算器

只是记录一下代码,随意取用

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:orientation="horizontal">
    </LinearLayout>
<!--写一个计算器的layout-->
    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="@color/white"
        android:gravity="right"
        android:padding="10dp"
        android:text=" "
        android:textColor="@color/black"
        android:textSize="30sp"
        tools:ignore="DuplicateIds" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_clear"
            android:layout_width="0dp"
            android:layout_height="60dp"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="C"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_del"
            android:layout_width="0dp"
            android:layout_height="60dp"
            android:layout_margin="6dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="Del"
            android:textColor="@color/white"
            android:textSize="20sp" />

        <Button
            android:id="@+id/btn_div"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="/"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_mul"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="*"
            android:textColor="@color/white"
            android:textSize="30sp" />
    </LinearLayout>

<!--计算器的数字按键-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_7"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="7"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_8"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="8"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_9"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="9"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_sub"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="-"
            android:textColor="@color/white"
            android:textSize="30sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="4"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_5"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="5"
            android:textColor="@color/white"
            android:textSize="30sp" />
        <Button
            android:id="@+id/btn_6"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="6"
            android:textColor="@color/white"
            android:textSize="30sp" />
<!--        补充符号-->
        <Button
            android:id="@+id/btn_add"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="+"
            android:textColor="@color/white"
            android:textSize="30sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="1"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="2"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="3"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_equal"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="="
            android:textColor="@color/white"
            android:textSize="30sp" />
    </LinearLayout>
<!--    百分号,0,小数点按键-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_percent"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="%"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_0"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="0"
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_point"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="."
            android:textColor="@color/white"
            android:textSize="30sp" />

        <Button
            android:id="@+id/btn_none"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@color/white"
            android:text="B"
            android:textColor="@color/white"
            android:textSize="30sp" />
    </LinearLayout>

</LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277

然后是MainActivity.java

package com.zdb.hwfrist;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
//导入数据框
import android.widget.Button;
import android.widget.TextView;

import java.util.Stack;


public class MainActivity extends AppCompatActivity {
    //创建button对象
    Button btn_none,btn_0, btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9, btn_percent, btn_del, btn_point, btn_add, btn_sub, btn_mul, btn_div, btn_equal, btn_clear;
    //创建TextView对象
    TextView tv_result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        实例化对象
        btn_0 = findViewById(R.id.btn_0);
        btn_1 = findViewById(R.id.btn_1);
        btn_2 = findViewById(R.id.btn_2);
        btn_3 = findViewById(R.id.btn_3);
        btn_4 = findViewById(R.id.btn_4);
        btn_5 = findViewById(R.id.btn_5);
        btn_6 = findViewById(R.id.btn_6);
        btn_7 = findViewById(R.id.btn_7);
        btn_8 = findViewById(R.id.btn_8);
        btn_9 = findViewById(R.id.btn_9);
        btn_percent = findViewById(R.id.btn_percent);
        btn_add = findViewById(R.id.btn_add);
        btn_sub = findViewById(R.id.btn_sub);
        btn_mul = findViewById(R.id.btn_mul);
        btn_div = findViewById(R.id.btn_div);
        btn_del = findViewById(R.id.btn_del);
        btn_equal = findViewById(R.id.btn_equal);
        btn_point = findViewById(R.id.btn_point);
        btn_clear = findViewById(R.id.btn_clear);
        tv_result = findViewById(R.id.tv_result);
        btn_none = findViewById(R.id.btn_none);
//        给按钮添加点击事件

        btn_0.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "0");
        });
        btn_1.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "1");
        });
        btn_2.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "2");
        });
        btn_3.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "3");
        });
        btn_4.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "4");
        });
        btn_5.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "5");
        });
        btn_6.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "6");
        });
        btn_7.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "7");
        });
        btn_8.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "8");
        });
        btn_9.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "9");
        });
        btn_point.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + ".");
        });
        btn_clear.setOnClickListener(v -> {
            tv_result.setText(" ");
        });
        btn_none.setOnClickListener(v -> {
            tv_result.setText("叫你手贱,点我干什么");
        });
        btn_del.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            if (str_out.length() == 1) {
                tv_result.setText(" ");
            } else {
                tv_result.setText(str_out.substring(0, str_out.length() - 1));
            }
        });
        btn_add.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "+");
        });
        btn_sub.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "-");
        });
        btn_mul.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "*");
        });
        btn_div.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "/");
        });
        btn_percent.setOnClickListener(v -> {
            String str_out = tv_result.getText().toString();
            tv_result.setText(str_out + "%");
        });

        btn_equal.setOnClickListener(v -> {
            String str = tv_result.getText().toString();
//            如果str是中文,就不执行
            if (str.contains("叫")) {
                return;
            }
//            如果str是空的,就不执行
            if (str.equals(" ")) {
                return;
            }
//            如果str是以运算符结尾,就不执行
            if (str.endsWith("+") || str.endsWith("-") || str.endsWith("*") || str.endsWith("/")) {
                tv_result.setText(str+"好好写");
                return;
            }
            str="1*"+str;
//            如果str有%,则在%后面加一个1
            if (str.contains("%")) {
                str = str.replace("%", "%0");
            }
            Object result = calculate(str);
            System.out.println(result);

//                打印result
            System.out.println(result);
//               如果小数点后面是0,就不显示
            if (result.toString().endsWith(".0")) {
                tv_result.setText(result.toString().substring(0, result.toString().length() - 2));
            } else {
                tv_result.setText(result + "");
            }


        });
    }

    public static double calculate(String input) {
        String[] parts = input.split("(?<=[-+*/%])|(?=[-+*/%])");
        Stack<Double> numbers = new Stack<>();
        Stack<Character> operators = new Stack<>();
        for (String part : parts) {
            part = part.trim();
            if (part.isEmpty()) {
                continue;
            }
            char firstChar = part.charAt(0);
            if (Character.isDigit(firstChar)) {
                double num = Double.parseDouble(part);
                numbers.push(num);
            } else {
                while (!operators.isEmpty() && shouldPopOperator(operators.peek(), firstChar)) {
                    char op = operators.pop();
                    double num2 = numbers.pop();
                    double num1 = numbers.pop();
                    double result = calculateOneOperation(num1, num2, op);
                    numbers.push(result);
                }
                operators.push(firstChar);
            }
        }
        while (!operators.isEmpty()) {
            char op = operators.pop();
            double num2 = numbers.pop();
            double num1 = numbers.pop();
            double result = calculateOneOperation(num1, num2, op);
            numbers.push(result);
        }
        return numbers.pop();
    }

    private static boolean shouldPopOperator(char op1, char op2) {
        if (op1 == '(' || op1 == ')') {
            return false;
        }
        int precedence1 = getOperatorPrecedence(op1);
        int precedence2 = getOperatorPrecedence(op2);
        return precedence1 >= precedence2;
    }

    private static int getOperatorPrecedence(char op) {
        switch (op) {
            case '+':
            case '-':
                return 1;
            case '*':
            case '/':
                return 2;
            case '%':
                return 3;
            default:
                return 0;
        }
    }

    private static double calculateOneOperation(double num1, double num2, char op) {
        switch (op) {
            case '%':
                return num1 * 0.01;
            case '+':
                return num1 + num2;
            case '-':
                return num1 - num2;
            case '*':
                return num1 * num2;
            case '/':
                return num1 / num2;

            default:
                throw new IllegalArgumentException("Invalid operator: " + op);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/412369
推荐阅读
相关标签
  

闽ICP备14008679号