首页 > 解决方案 > 使用堆栈的中缀到后缀 - Java

问题描述

我正在尝试学习和实现堆栈的一些实际用途,并且我正在做一个小程序,它接受一个方程并将其转换为后缀符号。我知道后缀表示法、堆栈和优先级是如何工作的,所以我采用的语法方法对我来说似乎很有意义,但是它似乎以某种前缀表示法打印出来,有时会有一些重复,这真的很奇怪。任何帮助将不胜感激,我将在下面为你们留下所有代码,谢谢。

import java.util.Scanner;
import java.util.Stack;

public class Main {

    public static void main(String[] args) {
        infixToPostfix();
    }

    private static int Precedence(char character) {

        System.out.print("" + character);
        switch (character) {
        case '+':
        case '-':
            return 1;
        case '/':
        case '*':
            return 2;
        case '^':
            return 3;
        }
        return -1;
    }

    private static String infixToPostfix() {

        Scanner scanner = new Scanner(System.in);
        Stack<Character> operatorStack = new Stack<>();
        System.out.println("please enter your equation");
        String equation = scanner.nextLine();
        StringBuilder result = new StringBuilder();

        for (int i = 0; i < equation.length(); i++) {
            char ch = equation.charAt(i);
            if (Character.isDigit(ch)) {
                result.append(ch);
            } else if (ch == '(') {
                operatorStack.push(ch);
            } else if (operatorStack.isEmpty()
                    && !Character.isDigit(ch)) {
                operatorStack.push(ch);
            } else {
                while (!operatorStack.isEmpty()) {
                    if (!Character.isDigit(ch)
                            && Precedence(
                                    ch) < operatorStack
                                            .peek()) {
                        result.append(operatorStack.pop());
                    } else if (!Character.isDigit(ch)
                            && Precedence(
                                    ch) > operatorStack
                                            .peek()) {
                        operatorStack.push(ch);
                    } else if (ch == ')') {
                        result.append(operatorStack.pop());
                    }
                }
            }
        }

        System.out.println(result);
        return result.toString();
    }


}
2*(3+1) // input
++23(*1 // output
31+2* // expected output

Process finished with exit code 0

标签: javastackpostfix-notation

解决方案


推荐阅读