前缀到后缀 Java

Prefix To Postfix Java

我的前缀到后缀代码需要一些帮助。每当我通过 GUI 从表达式“* 2 + 2 - + 12 9 2”生成操作时,它 returns 2*。它应该返回“2 2 12 9 + 2 -+*”。我一直在更改代码,但我一直以相同的结果结束。如果有任何指导,我将不胜感激。

import java.util.*; 

public class Postfix{ 
      
    static String prePostfix(String p){ 
      
        Stack<String> stack = new Stack<String>(); 
      
        int l = p.length(); 
      
        for(int i = l-1; i >= 0; i--){ 
            if(isOperator(p.charAt(i))){ 
      
                String stack1 = stack.peek(); 
                stack.pop();
                String stack2 = stack.peek(); 
                stack.pop(); 
      
                String temp = stack1 + stack2 + p.charAt(i); 
      
                stack.push(temp); 
            } 
      
            else{ 
                stack.push(p.charAt(i) + ""); 
            } 
        } 
      
        return stack.peek(); 
    } 
    
    static boolean isOperator(char x){ 
        switch (x){ 
            case '+':
            case '-': 
            case '/': 
            case '*':
            case '^':
                return true; 
        } 
        return false; 
    } 
}

你的问题是你没有考虑表达式中的分隔符,它们是每个子表达式之间的空格。

我建议您不要处理带有分隔符的原始字符串, 只需将您的字符串拆分为参数并处理该数组,然后使用您喜欢的分隔符加入它们。

无论如何,这里是固定代码:

import java.util.*; 

public class Postfix{ 
  
static String prePostfix(String p){ 
  
    Stack<String> stack = new Stack<String>(); 
    String[] arrOfStr = p.split(" ");
    int l = arrOfStr.length; 
    for(int i = l-1; i >= 0; i--){ 
        if(isOperator(arrOfStr[i].charAt(0))){ 
  
            String stack1 = stack.peek(); 
            stack.pop();
            String stack2 = stack.peek(); 
            stack.pop(); 
  
            String temp = stack1 + " " + stack2 + " " + arrOfStr[i]; 
  
            stack.push(temp); 
        } 
        else{ 
            stack.push(arrOfStr[i]); 
        } 
    } 
  
    return stack.peek(); 
} 

static boolean isOperator(char x){ 
    switch (x){ 
        case '+':
        case '-': 
        case '/': 
        case '*':
        case '^':
            return true; 
    } 
    return false; 
} 

}