提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

三大表达式

一、中缀转后缀

二、逆波兰表达式计算

总结



三大表达式

  1. 前缀表达式
  2. 中缀表达式 :就是我们平时常见的表达式 对人来说便于理解 计算机不易理解
  3. 后缀表达式:


提示:以下是本篇文章正文内容,下面案例可供参考

一、中缀转后缀

思路:

  1. 如果运算符栈为空 或者 栈顶为( 就直接在栈顶压入运算符
  2. 如果新添加的运算符的优先级高于 栈顶的运算符 也直接压入栈中
  3. 如果是 (  直接压入栈底
  4. 如果新添加的运算符的优先级小于等于栈顶的运算符(需要判断栈是否为空) 那就先把 运算符栈顶的运算符取出存入  逆波兰表达式栈中,再将新添加的运算符和 运算符栈顶的运算符进行比较。
  5. 如果遇到右括号 就将 右括号到上一个左括号之间的运算符 取出压入 逆波兰表达式栈中
  6. 如果中缀表达式为null那就依次将 运算符栈中的运算符取出压入 逆波兰表达式栈中
    public static String  zhuanPoland(String str){Stack<String> numStack=new Stack();Stack<Character> operStack=new Stack();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);// 运算符需要判断的条件if (isOper(c)){if (c=='('){ //operStack.push(c);}else if (c==')'){while (operStack.peek()!='('){numStack.push(String.valueOf(operStack.pop()));}operStack.pop();}else{//此处默认判断了包含运算符栈为空 或者 栈顶为( ,或者优先级大于栈顶字符得到情况while (!operStack.empty()&&priority(c)<=priority(operStack.peek())){numStack.push(String.valueOf(operStack.pop()));}operStack.push(c);}}// 运算符需要判断的条件//--判断不是运算符的多位数else {for (int j = i; j < str.length(); j++) {char d = str.charAt(j);if (isOper(d)) {numStack.push(str.substring(i, j));i=j-1;break;}if(j+1==str.length()){numStack.push(str.substring(i, j+1));i=j;}}}//--判断不是运算符的多位数}while (!operStack.empty()){numStack.push(String.valueOf(operStack.pop()));}Stack<String> numStack2=new Stack();while (!numStack.empty()){numStack2.push(numStack.pop());}StringBuffer sb = new StringBuffer();while (!numStack2.empty()){sb.append(numStack2.pop()+" ");}str= String.valueOf(sb);return str;}//返回运算符的优先级public static int priority(char oper){if (oper=='*'||oper=='/'){return 1;}else if (oper=='+'||oper=='-'){return 0;}else {return -1;}}public static boolean isOper(char val){return val=='*'||val=='-'||val=='+'||val=='/'||val=='('||val==')';}

二、逆波兰表达式计算

思路

1.利用空格分割成 数组

2.遍历数组 判断是 数字 还是运算符 如果是数字就加入到栈顶  如果是字符从栈中取出栈顶和次栈顶的元素 进行运算 将运算结果在存入 栈顶

    public static int cal(String str){Stack<Integer> nums = new Stack<>();String[] strs = str.split(" ");for (String s:strs) {if (s.matches("\\d+")){//使用正则表达式判断 是否为多位数nums.push(Integer.valueOf(s));}else{int res=cal(nums.pop(),nums.pop(),s);nums.push(res);}}return nums.pop();}public static int cal(int num1,int num2,String val){switch (val){case "*":return num1*num2;case "/":return num2/num1;//  / 和 - 都要将num2 放到前为 因为num1取的时顶数case "+":return num1+num2;case "-":return num2-num1;}return 0;}

Java 逆波兰表达式完成计算器相关推荐

  1. Java逆波兰表达式计算

    后缀表达式(逆波兰表达式) 运算符位于操作数之后 从左至右扫描表达式,遇到数字遇到数字时,将数字压栈,遇到运算符时,弹出栈顶的两个元素,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈, ...

  2. C语言栈的运用:后缀表达式(逆波兰表达式)计算器

    原理很简单,当操作者输入中每遇数字便将数字压入数栈,每遇符号便进行两次弹栈进行该符号的运算,运算结果再次压入数栈.唯一要注意的一点就是进行除法运算时需要判断除数是否为0. 头文件: /*Captain ...

  3. java用逆波兰表达式实现字符串计算器

    1.java版本  import java.math.BigDecimal; import java.util.*;/*** @return* @author Tmz* @description:* ...

  4. 牛客 五子棋 逆波兰表达式计算器

    五子棋题目 牛客上一个比较有意思的思路,只需要判断四个方向 代码 import java.util.*; public class Main{public static boolean is(char ...

  5. 简单计算器 逆波兰表达式

    问题 C: 悠派计算器 时间限制: 1 Sec  内存限制: 128 MB 提交: 7  解决: 2 [提交][状态][讨论版][命题人:qianyouyou] 题目描述 yoyo的小老弟小渣渣灰特别 ...

  6. 逆波兰计算器android源码简书,计算器的核心算法-JavaScript实现(逆波兰表达式)...

    最终计算器的掩饰效果,欢迎大家来找BUG. http://codepen.io/lvanboy/full/LxKVxJ/ 功能: 1.按照运算符的优先级运算 2.利用上次的结果继续运算 3.多个数字混 ...

  7. 数据结构 - 栈 (逆波兰计算器)(栈的三种表达式)(前缀、中缀和后缀表达式,后缀也叫逆波兰表达式)(中缀表达式转后缀表达式实现步骤及完整代码)

    栈的三种表达式:前缀.中缀和后缀表达式,后缀也叫逆波兰表达式 前缀(波兰表达式) 中缀(对人来讲很好理解,对于计算机来讲就方便了,一般会把中缀表达式转换成后缀表达式) 后缀(逆波兰表达式) 计算过程 ...

  8. 【Java版oj】逆波兰表达式求值

    目录 一.原题再现 二.问题分析 三.完整代码 一.原题再现 150. 逆波兰表达式求值 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除 ...

  9. java 实现逆波兰表达式_逆波兰表达式java实现

    知道逆波兰表达式是一个偶然的情况,在用js的时候偶然发现了js中的一个eval函数,数学的表达式它竟然能直接解析出结果.后面通过查询才得知里面的核心是用的逆波兰表达式的算法.后面网上找了一下java的 ...

最新文章

  1. c语言学生信息系统 完整版,C语言 学生信息管理系统(完整版).docx
  2. 无缝衔接的人会遭报应吗_还为幼小衔接发愁吗?学会4招,孩子养成好习惯,与小学无缝对接...
  3. java 集合类源码分析--collections
  4. 函数的使用——未完待续
  5. NULL的陷阱:Merge
  6. JDK 1.8新特性
  7. mysql利用init-connect增加访问审计功能的实现
  8. python实例26[计算MD5]
  9. Folder and jar
  10. Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口
  11. [NLP]OpenNLP词形还原器(Lemmatizer)的使用
  12. ios测试游戏用什么软件,《超维对决》iOS测试安装说明
  13. python3 pdf转成txt
  14. 《学习笔记》在AngularJS视图中实现指令
  15. RFID中的天线技术-应用及设计现状
  16. 从程序员到项目经理(10):程序员加油站 --要执着但不要固执【转载】
  17. linux误删 bin目录,记linux下rm误删bin文件的解决方式
  18. listview距离顶端白边
  19. C++ 实现斗地主玩法
  20. (难度:35%)untrusted游戏通关攻略

热门文章

  1. 等级保护和分级保护区别与联系
  2. EDMA 和QDMA 还看不懂,先收藏着
  3. ICV:2022年中国车载摄像头市场规模有望突破50亿美元大关
  4. OpenShift 3.11单机安装和使用
  5. 思科路由器 VTY访问设备之Telnet配置
  6. 计算机启动时运行ccleaner,CCleaner中设置表详解
  7. android 投屏 ipad,ipad投屏到win10电脑
  8. HiPQTools工具HiPQStitchingTool标定(二)
  9. [20191206]隐含参数_db_always_check_system_ts.txt
  10. 第一章 管理与管理学 第一节 笔记2018