android简易智能容错计算器

简介: 特点是:在按“=”之前智能预算结果显示,点击按钮,按钮颜色变化思路是:将输入的中缀表达式转换成后缀表达式进行计算难点是:带负数的四则混合运算,以及智能预算显示(这一部分容易出问题)当然最后要记得负0的处理还是为0,除以0提示...

看了一些网上的代码,感觉多少有点问题,有的不能计算浮点数,有的不能计算多位数,或者没办法保证乘除法在加减法的前面,或者不能与负数进行混合运算。


我实现的如下:

特点是:在按“=”之前智能预算结果显示,点击按钮,按钮颜色变化

思路是:将输入的中缀表达式转换成后缀表达式进行计算

难点是:带负数的四则混合运算,以及智能预算显示(这一部分容易出问题)

当然最后要记得负0的处理还是为0,除以0提示不能除以0


源码地址:GitHub - liuchenyang0515/Simple_Intelligent_fault---tolerant_calculator: 简易智能容错计算器


如演示图不能正常播放,请刷新网页

简易智能容错计算器示意图(模拟我的华为手机界面和效果):


image.gif



image.gif



image.gif


image.gif


这里将中缀表达式转换为后缀表达式然后计算出结果的java代码贴出来,android代码见上面地址:


importjava.text.DecimalFormat;
importjava.util.LinkedList;
importjava.util.Queue;
importjava.util.Scanner;
importjava.util.Stack;
publicclassTest {
privatestaticStringBuilderstr;
publicstaticvoidmain(String[] args) {
Scannercin=newScanner(System.in);
Strings=cin.next();
cin.close();
str=newStringBuilder(s);
DecimalFormatdf=newDecimalFormat("###.##############");
Stringnum=null;
try {
doubled=calculate();
if (Double.isNaN(d) ||Double.isInfinite(d)) {
System.out.println("不能除以0");
            } else {
num=df.format(d);
            }
        } catch (Exceptione) {
System.out.println("错误!");
        }
System.out.println("-0".equals(num) ?"0" : num);
    }
privatestaticdoublecalculate() {
Queue<String>q=getPostfixExpression(); // 中缀表达式转为后缀表达式returncalculatePostfixExpression(q);
    }
privatestaticdoublecalculatePostfixExpression(Queue<String>queue) {
Stack<Double>stack=newStack<>();
intlen=queue.size();
doublenum1=0.0, num2=0.0, num3=0.0;
for (inti=0; i<len; ++i) {
Strings=queue.poll();
if (!isOperator(s)) {
stack.push(Double.valueOf(s));
            } else {
num2=stack.pop();
num1=stack.pop();
switch (s) {
case"+":
num3=num1+num2;
break;
case"-":
num3=num1-num2;
break;
case"*":
num3=num1*num2;
break;
case"/":
num3=num1/num2;
break;
                }
stack.push(num3);
            }
        }
returnstack.peek();
    }
// 获得后缀表达式publicstaticQueue<String>getPostfixExpression() {
Stack<Character>stack=newStack<>();
intlen=str.length();
StringBuilderstrNum=newStringBuilder();
Queue<String>queue=newLinkedList<>();
chartemp=' ';
for (inti=0; i<len; ++i) {
temp=str.charAt(i);
if (temp>='0'&&temp<='9'||temp=='.') {
strNum.append(temp);
            } else {
if (i==0||isOperator(str.charAt(i-1) +"")) {
// 考虑负数的情况,比如乘以除以负数strNum.append(temp);
continue;
                }
queue.add(strNum.toString()); // 数字进队列strNum.setLength(0);
if (stack.isEmpty()) {
stack.push(temp);
                } else {
while (!stack.isEmpty()) {
chartop=stack.peek();
if (getPriority(top) >=getPriority(temp)) {
queue.add(top+"");
stack.pop();
                        } else {
break;
                        }
                    }
stack.push(temp);
                }
            }
        }
queue.add(strNum.toString()); // 数字进队列if (stack.isEmpty()) {
stack.push(temp);
        } else {
while (!stack.isEmpty()) {
chartop=stack.peek();
queue.add(top+"");
stack.pop();
            }
        }
returnqueue;
    }
privatestaticbooleanisOperator(Strings) {
returns.equals("+") ||s.equals("-") ||s.equals("*") ||s.equals("/");
    }
privatestaticintgetPriority(chartop) {
if (top=='+'||top=='-')
return1;
return2; // 只有加减乘除    }
}

image.gif

运行结果示例:

image.gif


image.gif


image.gif


image.gif


image.gif


image.gif


image.gif


image.gif


image.gif



image.gif


========================Talk is cheap, show me the code========================

目录
相关文章
|
Android开发
Android--智能下拉刷新框架(SmartRefreshLayout)
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/79369430 SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构。
2837 0
|
5天前
|
API Apache Android开发
对于Android的http请求的容错管理
对于Android的http请求的容错管理
|
20天前
|
监控 物联网 数据处理
构建未来:基于Android的智能物联网家居系统
【4月更文挑战第24天】 随着物联网技术的飞速发展,智能家居系统作为其重要分支之一,正逐渐渗透到千家万户。本文将详细探讨如何利用Android平台的灵活性和开放性,设计并实现一个高效、可靠的智能物联网家居系统。我们将从系统的架构设计出发,深入分析关键技术点,包括设备通信协议、用户界面设计以及后台数据处理等方面,并展示通过Android设备进行实时控制和监控的实用性。文章不仅聚焦于技术细节,还将对未来发展趋势及潜在挑战进行前瞻性讨论。
14 0
|
5月前
|
传感器 人工智能 自动驾驶
【Android App】物联网实战项目之自动驾驶的智能小车(附源码和演示 超详细)
【Android App】物联网实战项目之自动驾驶的智能小车(附源码和演示 超详细)
121 0
|
11月前
|
XML 编解码 架构师
Android智能平板应用,界面适配的另一种轻量级方法
Android智能平板应用,界面适配的另一种轻量级方法
|
Web App开发 Android开发 智能硬件
Android Things开发智能小车,Android智能硬件玩起来
目前是0.1版本,这已经是一个可以运动、可以调速、可以遥控、可以避免碰撞的简单但功能完整的小车了。 项目代码:https://github.com/sysolve/androidthings-cameraCar 基于Android Things开发,使用树莓派3B或NXP Pico开发板均可搭建。
1575 0
|
JSON 机器人 API
使用kotlin实现一个智能聊天机器人「图灵机器人,Android,kotlin」
推荐一部关于Ai的系列漫画,叫做代码的深渊 相关代码已经上传到Github的仓库kotlinRobot 先来看一下实现的效果图 智能机器人效果预览~1.gif 文章思路参考自刘桂林前辈的带领新手快速开发APP ,聊天界面代码参考于郭神的第一行代码第二版第三章3.7节,由衷感谢。
1521 0