方法:

1.将string类型的表达式输入转换成后缀表达式

2.计算后缀表达式

步骤一:将string类型的表达式输入转换成后缀表达式

输入字符串表达式,并将表达式转换成char型数组

String a = "(5+5)*2-(4-2)/2";
char [] x = a.toCharArray();
Stack<Character> b = new Stack<>();
String back = "";//后缀表达式

后缀表达式实现

1. 遇到”(“时进栈

2. 遇到数字,将数字加入back字符串后面

3. 遇到”+“、”-“、”*“、”/“时,判断栈顶元素的优先级是否高于或等于该元素,如果是则依次出栈加入back直到栈顶元素优先级小于该元素,该元素进栈

4. 遇到”)“时,栈顶元素依次出栈直到栈顶为”(“,删除栈顶”(“元素

for (int i = 0; i <x.length; i++) {
//System.out.println(back);
if(x[i] == '(') b.push(x[i]);
if(x[i] == '+' || x[i] == '-') {
while(!b.isEmpty() && (b.peek() == '*' || b.peek() == '/')) {
back = back + b.peek();
b.pop();
}
b.push(x[i]);
}
if(x[i] == '*' || x[i] == '/') {
while(!b.isEmpty() && (b.peek() == '*' || b.peek() == '/')) {
back = back + b.peek();
b.pop();
}
b.push(x[i]);
}
if(x[i] == ')') {
while (!b.isEmpty()){
if(b.peek() == '(') {b.pop(); break;}
//System.out.println(back);
back = back + b.peek();
b.pop();
}
}
if(x[i] >= '0' && x[i] <= '9') back = back + x[i];
}
while(!b.isEmpty()){
back += b.peek();
b.pop();
}
System.out.println(back); 

步骤二:计算后缀表达式

1. 遇到数字则进栈

2. 遇到运算符时,取出栈顶两个元素进行计算

3. 直到栈为空

Stack<Double> bb = new Stack<>();
double p,q;
char [] xx = back.toCharArray();
for (int i = 0; i < xx.length; i++) {
if(xx[i] >= '0' && xx[i] <= '9') {
double s = (double) xx[i] - 48;
//System.out.println(s);
bb.push(s);
//System.out.println(xx[i] - 48);
}
if(xx[i] == '+'){
p = bb.peek();
bb.pop();
q = bb.peek();
bb.pop();
double result = p+q;
bb.push(result);
//System.out.println(result);
}
if(xx[i] == '-'){
p = bb.peek();
bb.pop();
q = bb.peek();
bb.pop();
double result = q-p;
bb.push(result);
//System.out.println(result);
}
if(xx[i] == '*'){
p = bb.peek();
bb.pop();
q = bb.peek();
bb.pop();
double result = p*q;
bb.push(result);
//System.out.println(result);
}
if(xx[i] == '/'){
p = bb.peek();
bb.pop();
q = bb.peek();
bb.pop();
double result = q/p;
bb.push(result);
//System.out.println(result);
}
}
int aaa = bb.peek().intValue();
System.out.println(aaa);

优势与局限

1. 该方法解决了优先级高无括号的问题

2. 该方法解决了除法生成小数的问题

3. 该方法仅限于0-9的简单计算

4. 该方法输入仅限于整数

声明:在十位数或以上的简单计算或是小数的简单计算上,如有好的方法告知

基于java的简易计算器实现的更多相关文章

  1. 基于Java的简易表达式解析工具(一)

    最近需要用到相关表达式解析的工具,然后去网上搜索,找到了一个用C#写的表达式解析工具,仔细看了功能后发现,这正是我需要的,如果我能将它改造成基于Java语言的方式,岂不是更好吗,所以花了一段时间,把网 ...

  2. 基于Java的简易表达式解析工具(二)

    之前简单的介绍了这个基于Java表达式解析工具,现在把代码分享给大家,希望帮助到有需要的人们,这个分享代码中依赖了一些其他的类,这些类大家可以根据自己的情况进行导入,无非就是写字符串处理工具类,日期处 ...

  3. 基于Andriod的简易计算器

    这学期有安卓这门课,这里做了一个简易的计算器,实现了两位数加减乘除的基本功能,比较简单适合用来入门学习. 运行效果 预备知识 实现这个计算器之前要先了解实现计算器需要的基本组件 1.TextView ...

  4. Java实现简易计算器

    import java.util.Scanner; public class Demo_1 { public static void main(String[] args) { //输入的两个数字进行 ...

  5. java基础——简易计算器的实现

    计算器: import java.util.Scanner;​public class CalculateDemo {    public static void main(String[] args ...

  6. java开发简易计算器

    所选用的编译工具为NetBeans /* * To change this license header, choose License Headers in Project Properties. ...

  7. 基于c的简易计算器二

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> ...

  8. 基于c的简易计算器一

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h&g ...

  9. 如何使用Java AWT 创建一个简易计算器

    摘要:手把手教你使用 Java AWT 创建一个简易计算器. 本文分享自华为云社区<手把手教你使用 Java AWT 创建一个简易计算器>,作者:海拥 . 关于AWT AWT (抽象窗口工 ...

随机推荐

  1. sqlserver2008数据库文件降级为sqlserver2005文件

    直接分离附加是不行的. 操作步骤如下: 在sqlserver2008企业管理器中 右键xx数据库->任务->生成脚本 弹出框中勾选 为所选数据库中的所有对象编写脚本 下一步  修改如下图片 ...

  2. ios的白屏坑

    请参考http://www.fly63.com/article/detial/287

  3. WPF中使用定时器 DispatcherTimer 做TCP连接中的心跳 HeartBeat

    开发过程中经常遇到定时触发的需求,如:TCP/IP连接中,使用心跳包保持连接或检测连接是否已经中断. WPF中有多种定时器: 1.using System.Windows.Threading; 代码如 ...

  4. 任务十:Flexbox 布局练习

    任务目的 学习如何flex进行布局,学习如何根据屏幕宽度调整布局策略. 任务描述 需要实现的效果如效果图(点击打开)所示,调整浏览器宽度查看响应式效果,红色的文字是说明,不需要写在 HTML 中. 任 ...

  5. metasploit 连接database相关问题

    我们首先去这个目录下看database.yml文件内容: 下图是我们看到的的信息 接着打开metasploit,运行db_connect 指令链接数据库.格式为: db_connect 用户名:密码@ ...

  6. Linux Firefox Adobe Flash Player 安装和更新

    1.下载 Firefox Adobe Flash Player 使用Linux上的火狐浏览器访问如下的下载网址: https://get.adobe.com/flashplayer/ 选择下载 &qu ...

  7. Build 2016: 发布明天的云创新来服务今天的开发者

    每个企业和行业都在被云潜移默化地改变着.随着云计算的速度.规模和灵活性的不断增加,云服务带来的可能性也在不断被拓展.想象一下,通过监测传感器,一位奶农能够将他的奶牛牛奶产量提高:或是一家医院能够自动监 ...

  8. Scrapy框架Windows下安装

    在windows下安装好Python3 后,安装Scrapy也有许多种方法,我这里采用pip 安装.前提您已经安装了pip 直接在cmd命令行中 pip install Scrapy building ...

  9. Asp.net让某一页设置成gb2312或utf-8的方法

    有些需求,一定要用到utf-8格式,在web.config里面设置<globalization             requestEncoding="utf-8"     ...

  10. Anaconda套件,精簡版miniconda

    雖然Anaconda會預先安裝豐富的套件模組,尤其是在數據科學領域方面,有非常豐富的寶藏, 大多範例或教學或許為了節省後續的麻煩,不解釋為什麼,直接就安裝Anaconda 就對了: 但是大部份的模組套 ...