【Android】Simple_Caculator 简单计算器

这篇博客介绍了作者在开发Android简单计算器时遇到的问题,特别是关于运算符顺序和优先级的处理。计算器按照输入运算符顺序计算,如1+2*3得到9,原本打算扩展为处理多个数的运算,但忽视了运算符优先级。作者提到了中缀表达式及其在算法中的重要性,并展示了涉及的代码文件,包括MainActivity.java、activity_main.xml等,表明需要改进算法以正确处理运算优先级。
摘要由CSDN通过智能技术生成

Simple_Caculator

Mark一下

  • 这个计算器
    是按照输入时运算符的顺序计算的
    即 1 + 2 * 3 的结果是 9

我参考了网上的一些简单计算器的设计代码,简单的程度是只能两个操作数进行运算
我想多个数运算,思路

  • X + Y + Z,先算 X + Y = S
  • 然后算 S + Z = Q,以此类推

然而忘记了考虑运算符的优先级
中缀表达式(基本的算法 有前中后,又叫波兰式 数据结构中讲到的)

  • 反映 算法缺陷 需要加强

运行.


在这里插入图片描述

代码.

MainActivity.java


package com.example.simple_calculator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
   
    private TextView textView;
    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView)findViewById(R.id.sc_textView);
        editText = (EditText)findViewById(R.id.sc_textView_result);
    }

    public void onClick(View view) {
   
        Button btn = (Button) view;
        String content = textView.getText().toString();

        switch (view.getId()) {
   
            case R.id.sc_one:
            case R.id.sc_two:
            case R.id.sc_three:
            case R.id.sc_four:
            case R.id.sc_five:
            case R.id.sc_six:
            case R.id.sc_seven:
            case R.id.sc_eight:
            case R.id.sc_nine:
            case R.id.sc_zero:
                textView.setText(content + btn.getText());
                content = textView.getText().toString();
                if (!content.contains(" ") && !"".equals(content)) {
   
                    if ((Double.parseDouble(content) + 0) == 0) {
          //防止多0存在
                        textView.setText(String.valueOf(0));
                    } else if (content.startsWith("0")) {
              //防止非零数首位为0
                        textView.setText(content.substring(1, content.length()));
                    }
                }
                break;
            case R.id.sc_point:
                if(content.endsWith(" ")) {
   
                    Toast.makeText(this, "小数点前需要数字", Toast.LENGTH_SHORT).show();
                    break;
                }
                if (content.contains(".")) {
   
                    Toast.makeText(this, "已经有小数点了", Toast.LENGTH_SHORT).show();
                    break;
                }
                textView.setText(content + btn.getText());
                break;
            case R.id.sc_add:
            case R.id.sc_minus:
            case R.id.sc_multiply:
            case R.id.sc_divide:
                if(content.endsWith(" ")) {
   
                    Toast.makeText(this, "运算符之间需要有操作数", Toast.LENGTH_SHORT).show();
                    break;
                }
                textView.setText(content + " " + btn.getText() + " ");
                break;
            case R.id.sc_backspace:
                if (!"".equals(content)) {
   
                    textView.setText(content.substring(0, content.length() - 1));
                }
                break;
            case R.id.sc_clear:
                textView.setText("");
                break;
            case
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值