中缀表达式转后缀表达式java精确实现
2016-10-22 10:42
471 查看
package cn.itcast.StackAndQuen; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * Created by likailong on 2016/10/16. * 中缀表达式到后缀表达式 */ public class MathCaculate { public static void main(String [] args){ Scanner san=new Scanner(System.in);//键盘读入 List<Character> list=new ArrayList<>();//将中缀表达式变成后缀表达式用数组存储 String input = san.next();//得到输入的信息 char[] shuju = input.toCharArray();//输入的所有信息放入char数组里 int priority=0;//标记符号的的优先级 MyStack<Character>mystack=new MyStack<>();//符号优先级栈 MyStack<Integer>caculatestack=new MyStack<>();//计算后缀表达式栈 int special=0; for(int i=0;i<shuju.length;i++){//达到键盘输入的每个数据 if(getPriority(shuju[i])!=0){//的到每个数据的优先级 if(getPriority(shuju[i])>=priority&&getPriority(shuju[i])!=3){//如果得到的是个运算符 与栈顶优先级比较 priority=getPriority(shuju[i]);//如果大于等于栈顶优先级 入栈 反之出栈 mystack.push(shuju[i]); }else if((getPriority(shuju[i])==3&&priority!=3&&special!=3)||(getPriority(shuju[i])!=3&&priority==3&&special!=3)){ special=getPriority(shuju[i]);//如果大于等于栈顶优先级 入栈 反之出栈 mystack.push(shuju[i]); } else if(getPriority(shuju[i])==3&&special==3){ //如果大于等于栈顶优先级 入栈 反之出栈 while (!mystack.isEmpty()){//出栈操作 char num=mystack.pop(); list.add(num); System.out.print(num); } } else{ while (!mystack.isEmpty()){//出栈操作 char num=mystack.pop(); list.add(num); System.out.print(num); } mystack.push(shuju[i]); } }else{ System.out.print(shuju[i]);//如果是数字直接输出 用数组接收 list.add(shuju[i]); } } while (!mystack.isEmpty()){ char fuhao=mystack.pop(); list.add(fuhao); System.out.print(fuhao); } System.out.println(); for(int i=0;i<list.size();i++){//运算方法 把存在数组中的后缀表达式遍历 String nums=list.get(i).toString();//每个元素转换成字符串方便后面的Integer.parseInt(nums); char num=list.get(i); if(num=='('||num==')'){ list.remove(i); } if('0'<=num&&num<='9'){//字符串比较应该这么写 int numss=Integer.parseInt(nums);//字符串转数字 caculatestack.push(numss);//入栈 }else { int shuju1=caculatestack.pop();//出栈 int shuju2=caculatestack.pop(); char caculate=list.get(i); int numadd=0; if(caculate=='+'){//判断数组中的运算符 执行相关操作 numadd=shuju1+shuju2; }else if(caculate=='-'){ numadd= shuju2-shuju1; }else if(caculate=='*'){ numadd= shuju1*shuju2; }else if(caculate=='/'){ numadd=shuju1/shuju2; } caculatestack.push(numadd); } } System.out.println(caculatestack.pop());//得到栈顶元素及就是答案 } private static int getPriority(char shuju) {//的输入的每个字符的优先级 int priority=0; char num=shuju; if(0<=num&&num<=9){ }else { switch (num){ case '-': case '+': return priority=1; case '/': case '*': return priority=2; case '(': case ')': return priority=3; default:priority=0; } } return priority; } }
相关文章推荐
- 中缀表达式转后缀表达式java精确实现
- 中缀表达式转后缀表达式java精确实现
- 中缀表达式转后缀表达式java精确实现
- 中缀表达式转后缀表达式java精确实现
- 前缀、中缀、后缀表达式及其相互转化的Java实现
- 前缀、中缀、后缀表达式及其相互转化的Java实现
- 算术表达式求值(中缀转后缀,后缀求值,java 栈实现)
- 中缀到后缀表达式的转换:java-stack实现
- 中缀表达式转后缀表达式的java实现
- 栈练习之C语言中实现中缀转后缀表达式
- java实现 中缀转后缀
- 二叉树实现运算符优先级算法,支持表达式前缀,中缀,后缀,层次,广义表输出
- Java 栈实现中缀表达式转后缀表达式
- 利用JAVA实现中缀表达式向后缀表达式的转换,并求出表达式的值
- 线性表的实现与应用--表达式中缀转后缀并求值
- java实现中缀表达式转后缀表达式并且计算
- java实现中缀表达式转后缀表达式并且计算
- java 实现中缀表达式转为后缀表达式
- 中缀表达式转后缀表达式(用于求字符串表达式值)(js栈和队列的实现是通过数组的push和unshift方法插值,pop方法取值)
- java 中缀转后缀表达式(查阅别人资料后整理)