中缀表达式转后缀表达式java精确实现
来源:互联网 发布:centos编译安装php7.1 编辑:程序博客网 时间:2024/06/07 07:49
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; }}
0 0
- 中缀表达式转后缀表达式java精确实现
- java 实现中缀表达式转为后缀表达式
- 中缀表达式、后缀表达式 Java实现
- 【java】中缀表达式转后缀表达式 java实现
- Java中缀转后缀表达式
- Java 栈实现中缀表达式转后缀表达式
- java实现中缀表达式转后缀表达式并且计算
- Java实现中缀表达式转后缀表达式并计算结果
- 中缀表达式算法实现&中缀表达式转后缀表达式
- 计算器实现---中缀表达式转后缀表达式
- 中缀表达式转后缀表达式的实现
- java中缀表达式转后缀表达式
- java 中缀表达式转后缀表达式
- JAVA中缀表达式转后缀表达式
- 中缀表达式转后缀表达式--Java
- Java中缀表达式转后缀表达式
- java中缀表达式转后缀表达式
- Java 中缀表达式转后缀表达式 + 中/后缀表达式计算
- 分布式hadoop
- Java Swing 水晶界面 Nimbus风格
- iOS 创建颜色图片
- 【spring】下载及部署
- java keytool证书工具使用小结
- 中缀表达式转后缀表达式java精确实现
- TCMalloc的使用与源码剖析之五---------TCMalloc中涉及到的几个重要的数据结构
- JavaScript要点总结
- stm32之继电器驱动
- 编译Caffe的Matlab接口
- C语言指针
- Java内存机制
- matlab gui add table
- python闯关3——国际象棋问题