Java 如何将中缀转换为前缀?

Java 如何将中缀转换为前缀?,java,stack,prefix,infix-notation,Java,Stack,Prefix,Infix Notation,我写这段代码是为了把中缀转换成前缀,但是我没有得到任何输出。我能做什么 当最后一次运行时,它进入无限循环,如果条件不处理,问题是什么 static String infixToPrefix(String infix){ for (int j = 0; j < infix.length(); j++){ if (infix.charAt(j) == 's' && infix.charAt(j + 1) == 'i' &&

我写这段代码是为了把中缀转换成前缀,但是我没有得到任何输出。我能做什么

当最后一次运行时,它进入无限循环,如果条件不处理,问题是什么

 static String infixToPrefix(String infix){
        for (int j = 0; j < infix.length(); j++){
            if (infix.charAt(j) == 's' && infix.charAt(j + 1) == 'i' && infix.charAt(j + 2) == 'n'){
                infix = infix.replace("sin","S");
                break;
            }
            else if (infix.charAt(j) == 'c' && infix.charAt(j + 1) == 'o' && infix.charAt(j + 2) == 's' ){
                infix = infix.replace("cos", "C");
                break;
            }
            else if (infix.charAt(j) == 't' && infix.charAt(j + 1) == 'a' && infix.charAt(j + 2) == 'n' ) {
                infix = infix.replace("tan", "T");
                break;
            }
            else if (infix.charAt(j) == 'l' && infix.charAt(j + 1) == 'o' && infix.charAt(j + 2) == 'g' ) {
                infix = infix.replace("log", "L");
                break;
            }
        }
        Stack<String> operators = new Stack<>();
        Stack<String> operands = new Stack<>();
        String[] exp = infix.split("");
        for (int i = 0; i < exp.length; i++) {
            if (exp[i].equals("(")) {
                operators.push(exp[i]);
            }
            else if (exp[i].equals(")")) {
                while (!operators.isEmpty() && !operators.getTop().equals("(")) {
                    if (isMultiOperator(operators.getTop())){
                        String op1 = operands.getTop();
                        operands.pop();

                        String op2 = operands.getTop();
                        operands.pop();

                        String op3 = operators.getTop();
                        operators.pop();

                        String temp = op3 + op2 + op1;
                        operands.push(temp);
                    }
                    else if(isUnaryOperator(operators.getTop())){
                        String op1 = operands.getTop();
                        operands.pop();

                        String op2 = operators.getTop();
                        operators.pop();

                        String temp = op2 + op1;
                        operands.push(temp);
                    }
                }
                operators.pop();
            }
            else if (isMultiOperator(exp[i]) || isUnaryOperator(exp[i])){

                while (!(operators.isEmpty()) && precedence(exp[i]) <= precedence(operators.getTop())) {

                    if (isMultiOperator(operators.getTop())){
                        String op1 = operands.getTop();
                        operands.pop();

                        String op2 = operands.getTop();
                        operands.pop();

                        String op3 = operators.getTop();
                        operators.pop();

                        String temp = op3 + op2 + op1;
                        operands.push(temp);
                    }
                    else if (isUnaryOperator(operators.getTop())){
                        String op1 = operands.getTop();
                        operands.pop();

                        String op2 = operators.getTop();
                        operators.pop();

                        String temp = op2 + op1;
                    }
                }
                operators.push(exp[i] + " ");
            }
            else if (Character.isLetterOrDigit(infix.charAt(i))){
                boolean haveDot = exp[i].equals(".");
                String temp = haveDot ? "0." : exp[i];
                while ((i + 1) < exp.length && (Character.isLetterOrDigit(infix.charAt(i + 1)) || exp[i + 1].equals("."))) {
                    temp += exp[i + 1];
                    i++;
                }
                operands.push(temp + " ");
            }
        }
        while (!operators.isEmpty()){
            if (isMultiOperator(operators.getTop())){
                String op1 = operands.getTop();
                operands.pop();

                String op2 = operands.getTop();
                operands.pop();

                String op3 = operators.getTop();
                operators.pop();

                String temp = op3 + op2 + op1;
                operands.push(temp);
            }
            else if (isUnaryOperator(operators.getTop())){
                String op1 = operands.getTop();
                operands.pop();

                String op2 = operators.getTop();
                operators.pop();

                String temp = op2 + op1;
                operands.push(temp);
            }
        }
        return operands.getTop() ;
    }
静态字符串中缀前缀(字符串中缀){
对于(int j=0;j而(!(operators.isEmpty())&&priority(exp[i])则通过单步执行调试器中的程序开始。这将让您看到哪里出了问题。如果您不知道如何使用调试器,现在正是学习的最佳时机。我做得很好,但我仍然不知道哪里出了问题。您能帮助了解吗?!