java中缀表达式转后缀表达式
来源:互联网 发布:数据监控 编辑:程序博客网 时间:2024/05/29 12:26
package work1;import java.util.*;public class InffixToSuffix {private String []expressionCharArray; private List<String> newExpressionCharArray; private Stack<String> stack; public String inffixToSuffix(String expression) { this.InitParam(expression); for (int i = 0; i < expressionCharArray.length; i++) { if ("(".equals(expressionCharArray[i])) { this.dealLeftBracket(i); } else if ("+".equals(expressionCharArray[i]) || "-".equals(expressionCharArray[i]) || "*".equals(expressionCharArray[i]) || "/".equals(expressionCharArray[i])) { this.dealOpeartor(i); } else if (")".equals(expressionCharArray[i])) { this.dealRightBracket(i); } else { this.dealNormalChar(i); } } this.dealFinalCharsInStack(); return this.stringArrayToString(newExpressionCharArray); } private void InitParam(String expression){ expressionCharArray=this.stringToStringArray(expression); newExpressionCharArray=new ArrayList<>(); stack=new Stack<>(); stack.push("@"); } public boolean comparePrior(String operator1, String operator2) { if(getPrioryty(operator1)<=getPrioryty(operator2)) return false; else return true; } private int getPrioryty(String operator){ switch (operator) {case "*":case "/":return 2;case "+":case "-":return 1;case "(":return 0;case "@":return -1;default:break;}return 0; } private void dealLeftBracket(int index){ stack.push(expressionCharArray[index]); // 如果是左括号,则入栈 } private void dealRightBracket(int index){ try{ this.subDealRightBracket(index); } catch(Exception e){ System.out.println("输入格式错误,括号不匹配!"); System.exit(0); } } private void subDealRightBracket(int index){ while (!"(".equals(stack.peek())) { //如果是")",则出栈,一直到遇到"(" String s = stack.pop(); newExpressionCharArray.add(s); } stack.pop(); } private void dealOpeartor(int index){ String s = stack.pop(); if(comparePrior(expressionCharArray[index], s)) { //如果栈值优先级小于要入栈的值,则继续压入栈 stack.push(s); } else { //否则取出值 newExpressionCharArray.add(s); } stack.push(expressionCharArray[index]); } private void dealNormalChar(int index){ newExpressionCharArray.add(expressionCharArray[index]); } private void dealFinalCharsInStack(){ while (!"@".equals(stack.peek())) { String s = stack.pop(); this.dealFinalCharsHaveLeftBracket(s); newExpressionCharArray.add(s); } } private void dealFinalCharsHaveLeftBracket(String s){ if(ifHaveLeftBracket(s)){ System.out.println("输入格式错误,括号不匹配!"); System.exit(0); } } private boolean ifHaveLeftBracket(String s){ if(s.equals("(")) return true; else return false; } private String[] stringToStringArray(String expression){ String[] expressionArray=new String[expression.length()]; for(int i=0;i<expression.length();i++){ char[] tempChar=new char[1]; tempChar[0]=expression.charAt(i); expressionArray[i]=new String(tempChar); } return expressionArray; } private String stringArrayToString(List<String> expressionArray){ String expression=""; for (String expressionPart:expressionArray) expression=expression+expressionPart; return expression; } public static void main( String args[] ){ InffixToSuffix inffixToSuffix=new InffixToSuffix(); String test=new String("1*(2+8)"); System.out.println(inffixToSuffix.inffixToSuffix(test)); test="1*(2*(3-4))"; System.out.println(inffixToSuffix.inffixToSuffix(test)); }}
阅读全文
0 0
- Java中缀转后缀表达式
- java中缀表达式转后缀表达式
- java 中缀表达式转后缀表达式
- JAVA中缀表达式转后缀表达式
- 中缀表达式转后缀表达式--Java
- Java中缀表达式转后缀表达式
- java中缀表达式转后缀表达式
- Java 中缀表达式转后缀表达式 + 中/后缀表达式计算
- 中缀转后缀表达式
- 表达式中缀转后缀
- 中缀转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 40个Java多线程问题总结
- 【Natural Language Processing】语言模型(Language Modeling)
- 谷歌浏览器插件推荐
- 643. Maximum Average Subarray I
- altium designer使用小技巧总结
- java中缀表达式转后缀表达式
- 颜色矩阵常用效果
- 训练总结 9.24
- C/C++ 之 结构体(1)定义和赋值
- 老司机谈谈双一流
- 聚集索引和非聚集索引(整理)
- 我遇到的前端面试题2017
- 京东前端面经
- istringstream的用法 放在这里方便看