前缀/中缀/后缀表达式;
前缀后缀中缀表达式:
后缀表达式的代码实现:
package Demo1.stackArray; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Stack; public class PolandNocation { //后缀表达式:逆波兰表达式 public static void main(String[] args) { //创建一个表达式(3+4)*5-6 = 29 String suffixExpression = "3 4 + 5 * 6 -"; for (int i = 0; i < suffixExpression.length(); i++) { } //切割表达式,存入集合 PolandNocation polandNocation = new PolandNocation(); List<String> list = polandNocation.getArray(suffixExpression); // list.forEach(System.out::print); System.out.println(list); //计算 System.out.println(); try { int calculate = polandNocation.calculate(list); System.out.println("计算的结果是:--》" + calculate); } catch (Exception e) { System.out.println(e.getMessage()); } finally { System.out.println("退出"); } } //压栈 public int calculate(List<String> lis) { //构建一个栈 Stack<String> stack = new Stack<>(); for (String item : lis) { if (item.matches("\\d+")) {//匹配多位数 stack.push(item); } else { int num2 = Integer.parseInt(stack.pop()); int num1 = Integer.parseInt(stack.pop()); int result = 0; if (item.equals("+")) { result = num1 + num2; } else if (item.equals("-")) { result = num1 - num2; } else if (item.equals("*")) { result = num1 * num2; } else if (item.equals("/")) { result = num1 / num2; } else { throw new RuntimeException("运算符!!!异常"); } stack.push("" + result); } } return Integer.parseInt(stack.pop()); } //切割字符串(),存入集合(ArrayList) public List<String> getArray(String suffixExpression) { //把数据切割装入ArrayList ArrayList<String> arrayList = new ArrayList<>(); String[] split = suffixExpression.split(" "); for (String number : split) { arrayList.add(number); } return arrayList; } }
作者:隔壁老郭
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
Java入门到入坟
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!