Java中缀转后缀表达式
来源:互联网 发布:淘宝买家皇冠号多少钱 编辑:程序博客网 时间:2024/05/17 08:56
Java中缀转后缀表达式
看了网上其他人写的感觉好复杂,难以理解,我感觉我的实现很简单,容易明白,可以借鉴!哈哈
注释很全,不解释了
public class Demo { @Test public void main(){ String hou = zhongTransHou("2+((1-3)*4)-2"); System.out.println(hou); } public String zhongTransHou(String zhong){ //创建一个栈存放运算符使用 Stack<Character> ysfz = new Stack<Character>(); StringBuilder hz = new StringBuilder(); //扫描整个运算表达式 char[] chars = zhong.toCharArray(); for (char c : chars) { //当前扫描的是运算符 if(c == '+' || c== '-' || c== '*' || c=='/'||c==')'||c=='('){ //进行优先级和右括号的判断 //如果当前元素是右括号的话 if(c == ')'){ while(ysfz.peek()!='('){//遍历部分栈,只要栈顶不是"("都要出战,并且匹配到"("本身也要出栈 char top = ysfz.pop();//移除栈顶元素并返回移除的值 hz.append(top); } //执行到这里说明已经清空了所有的在"("上面的运算符,此后将本身也给清楚 ysfz.pop(); }else if(ysfz.isEmpty()){//当前栈是空的话 ysfz.push(c);//直接入栈 }else if(curYSFIsGao(c,ysfz)){//当前运算符比栈顶运算符高的话 ysfz.add(c); }else if(!curYSFIsGao(c,ysfz)){//当前运算符比栈顶运算符低的话 while(!ysfz.isEmpty()){//遍历整个栈 char top = ysfz.pop(); hz.append(top); } //执行到这里栈已经是空了,现在将当前元素入栈 ysfz.push(c); } }else{//当前扫描的数字 hz.append(c); } } //真个表达式扫描之后,出栈 while(!ysfz.isEmpty()){ char top = ysfz.pop(); hz.append(top); } return hz.toString(); } /** * 判断当前元素和栈顶元素的优先级,这里面间接的判断如果是“(”也是入栈(优先级高就入栈) * @param c * @param ysfz * @return */ private boolean curYSFIsGao(char c,Stack<Character> ysfz) { boolean isGao = true;//默认是高 //拿取栈顶元素,和当前传入元素做比较优先级 char top = ysfz.peek(); if(c == '+' || c == '-'){ if(top == '*' || top == '/'){ isGao = false; } //遇到加减或者"("默认高 } //当前是乘除的话默认高,也就是都向栈里面添加 return isGao; }}
阅读全文
0 1
- Java中缀转后缀表达式
- java中缀表达式转后缀表达式
- java 中缀表达式转后缀表达式
- JAVA中缀表达式转后缀表达式
- 中缀表达式转后缀表达式--Java
- Java中缀表达式转后缀表达式
- java中缀表达式转后缀表达式
- Java 中缀表达式转后缀表达式 + 中/后缀表达式计算
- 中缀转后缀表达式
- 表达式中缀转后缀
- 中缀转后缀表达式
- java算术表达式求值-中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- Android按钮的渐变色的简单实现
- VS2013出现“无法找到“xxx.exe”的调试信息,或者调试信息不匹配”错误解决方案
- 深入理解Java虚拟机(一)
- 软件工程第二章第3题
- java数据结构与算法的基础总结
- Java中缀转后缀表达式
- == equals()问题
- 判断手机端还是pc端苹果系统出现的问题
- Linux用户至今仍无法完成的七项任务
- SpringBoot 快速简单读取properties文件
- tornado学习笔记总结
- MySql的字符串函数
- Mac下更新node版本
- [python]谈谈 if __name__ == '__main__'