IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 第29篇 Android Studio无括号计算器(三)逻辑代码及资源文件 -> 正文阅读

[移动开发]第29篇 Android Studio无括号计算器(三)逻辑代码及资源文件

第29篇 Android Studio无括号计算器(三)逻辑代码及资源文件

3.逻辑代码及资源

3.1.strings.xml

设置一些数据:

<resources>
    <string name="app_name">简易计算器</string>
    <string name="btn_clear_name">C</string>
    <string name="btn_delete_name">D</string>

    <string name="btn_add_name">+</string>
    <string name="btn_sub_name">-</string>
    <string name="btn_mul_name">*</string>
    <string name="btn_div_name">/</string>

    <string name="btn_1_name">1</string>
    <string name="btn_2_name">2</string>
    <string name="btn_3_name">3</string>
    <string name="btn_4_name">4</string>
    <string name="btn_5_name">5</string>
    <string name="btn_6_name">6</string>
    <string name="btn_7_name">7</string>
    <string name="btn_8_name">8</string>
    <string name="btn_9_name">9</string>
    <string name="btn_0_name">0</string>

    <string name="btn_point_name">.</string>
    <string name="btn_equal_name">=</string>

</resources>

3.2.逻辑代码

就是设置按钮的监听事件。

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

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

import java.text.DecimalFormat;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

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

        i_before = 0;
        i_back = 0;
        initData();
    }

    protected  void initData() {
        Button btn_0 = findViewById(R.id.btn_0);
        Button btn_1 = findViewById(R.id.btn_1);
        Button btn_2 = findViewById(R.id.btn_2);
        Button btn_3 = findViewById(R.id.btn_3);
        Button btn_4 = findViewById(R.id.btn_4);
        Button btn_5 = findViewById(R.id.btn_5);
        Button btn_6 = findViewById(R.id.btn_6);
        Button btn_7 = findViewById(R.id.btn_7);
        Button btn_8 = findViewById(R.id.btn_8);
        Button btn_9 = findViewById(R.id.btn_9);
        Button btn_add = findViewById(R.id.btn_add);
        Button btn_sub = findViewById(R.id.btn_sub);
        Button btn_mul = findViewById(R.id.btn_mul);
        Button btn_div = findViewById(R.id.btn_div);
        Button btn_point = findViewById(R.id.btn_point);
        Button btn_equal = findViewById(R.id.btn_equal);
        Button btn_clear = findViewById(R.id.btn_clear);
        Button btn_delete = findViewById(R.id.btn_delete);

        btn_0.setOnClickListener(this);
        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_7.setOnClickListener(this);
        btn_8.setOnClickListener(this);
        btn_9.setOnClickListener(this);
        btn_add.setOnClickListener(this);
        btn_sub.setOnClickListener(this);
        btn_mul.setOnClickListener(this);
        btn_div.setOnClickListener(this);
        btn_point.setOnClickListener(this);
        btn_equal.setOnClickListener(this);
        btn_clear.setOnClickListener(this);
        btn_delete.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        EditText edit_formula = findViewById(R.id.edit_formula);
        String str_formula = edit_formula.getText().toString();

        if(view.getId() == R.id.btn_equal){
            if(str_formula.equals("")){
                Toast.makeText(MainActivity.this,"请先输入算式",Toast.LENGTH_SHORT).show();
            }
            else{
                str_formula = compute(str_formula,"*","/");
                str_formula = compute(str_formula,"+","-");
                edit_formula.setText(str_formula);
            }
        }
        else if(view.getId() == R.id.btn_add || view.getId() == R.id.btn_sub ||
                view.getId() == R.id.btn_mul || view.getId() == R.id.btn_div){
            if(str_formula.equals("")){
                if(view.getId() == R.id.btn_sub){
                    Button btn_char = findViewById(view.getId());
                    String str_endChar = btn_char.getText().toString();
                    str_formula = str_formula + str_endChar;
                    edit_formula.setText(str_formula);
                }
                else{
                    Toast.makeText(MainActivity.this,"请先输入数字",Toast.LENGTH_SHORT).show();
                }
            }
            else{
                String str_end = str_formula.substring(str_formula.length() - 1);
                boolean end_isOperator = str_end.equals("+") || str_end.equals("-") ||str_end.equals("*")||str_end.equals("/");
                if(!end_isOperator){
                    Button btn_char = findViewById(view.getId());
                    String str_endChar = btn_char.getText().toString();
                    str_formula = str_formula + str_endChar;
                    edit_formula.setText(str_formula);
                }
            }
        }
        else if(view.getId() == R.id.btn_point){
            if(str_formula.equals("")){
                Toast.makeText(MainActivity.this,"请先输入数字",Toast.LENGTH_SHORT).show();
            }
            else{
                String str = before(str_formula.length(),str_formula);
                int count = 0;
                for(int i = 0;i < str.length();i++){
                    if(str.charAt(i) == '.'){
                        count++;
                    }
                }
                if(count >= 1){
                    Toast.makeText(MainActivity.this,"一个数不能使用多个小数点",Toast.LENGTH_SHORT).show();
                }
                else{
                    Button btn_char = findViewById(view.getId());
                    String str_endChar = btn_char.getText().toString();
                    str_formula = str_formula + str_endChar;
                    edit_formula.setText(str_formula);
                }
            }
        }
        else if(view.getId() == R.id.btn_clear){
            edit_formula.setText("");
        }
        else if(view.getId() == R.id.btn_delete){
            if(str_formula.equals("")){
                Toast.makeText(MainActivity.this,"无可删除数据",Toast.LENGTH_SHORT).show();
            }
            else{
                str_formula = str_formula.substring(0,str_formula.length() - 1);
                edit_formula.setText(str_formula);
            }
        }
        else{
            Button btn_char = findViewById(view.getId());
            String str_endChar = btn_char.getText().toString();
            str_formula = str_formula + str_endChar;
            edit_formula.setText(str_formula);
        }
    }

    protected String compute(String formal, String operator1, String operator2){
        int i = 1;
        while (i < formal.length()){
            String str1 = String.valueOf(formal.charAt(i));
            if(str1.equals(operator1) || str1.equals(operator2)){
                String str2 = before(i,formal);
                String str3 = back(i,formal);
                if(str2.equals("") || str3.equals("")){
                    i++;
                    continue;
                }

                String s1 = formal.substring(0,i_before);
                if(operator1.equals("+") && i_before > 0){
                    str2 = formal.substring(0,i);
                    s1 = "";
                }
                String s2 = getResult(Double.parseDouble(str2),Double.parseDouble(str3),formal.charAt(i));
                String s3 = formal.substring(i_back);
                formal = s1 + s2 + s3;
                i = i_before;
            }
            else{
                i++;
            }
        }
        return formal;
    }

    protected String before(int index,String formal){
        int i = index - 1;
        while(i >= 0){
            if((formal.charAt(i) >= '0' && formal.charAt(i) <= '9') || formal.charAt(i) == '.'){
                i--;
            }
            else{
                break;
            }
        }
        i_before = i + 1;
        return formal.substring(i + 1,index);
    }

    protected String back(int index,String formal){
        int i = index + 1;
        while(i < formal.length()){
            if((formal.charAt(i) >= '0' && formal.charAt(i) <= '9') || formal.charAt(i) == '.'){
                i++;
            }
            else{
                break;
            }
        }
        i_back = i;
        return formal.substring(index + 1,i);
    }

    protected String getResult(double number1,double number2,char operator){
        double result = 0;
        switch(operator){
            case '+':
                result = number1 + number2;
                break;
            case '-':
                result = number1 - number2;
                break;
            case '*':
                result = number1 * number2;
                break;
            case '/':
                result = number1 / number2;
                break;
        }
        DecimalFormat df = new DecimalFormat("#.0");
        return df.format(result);
    }
}

3.3.结果

就是这样了,设置监听事件没什么说的了。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-30 12:02:39  更:2021-09-30 12:03:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:34:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码