2014-03-28 94 views
0
Stack<String> s = new Stack<String>(); 
    String[] tokens = infix.split(" "); 

    StringBuilder output = new StringBuilder(); 

    Integer.getInteger("+", 1); 
    Integer.getInteger("-", 1); 
    Integer.getInteger("*", 2); 
    Integer.getInteger("/", 2); 

    for (int i = 0; i < tokens.length; i++) 
    { 
     if (tokens[i].matches("[0-9]")) 
     { 
      output.append(tokens[i] + " "); 
     } 
     else if (tokens[i].equals("+") || tokens[i].equals("-") || tokens[i].equals("*") || tokens[i].equals("/")) 
     { 
      if(tokens[i] <= s.peek()) 
      { 

      } 
     } 
    } 

    return output.toString(); 

我在做一个中缀到后缀计算器,我想说,如果当前的标记值小于或等于该代币的价值在顶部堆栈。我使用Integer.valueOf为特定的标记设置一个数字值,但由于它们是字符串,因此无法使用“< =”,是否需要使用String.greaterThan()[虚构]类型的方法?比较字符串值,缀与postfix

+0

呃,'Integer.valueOf(“+”,1);'是怎么回事去炸掉。 “+”不是一个数字。 – azurefrog

回答

0
if (tokens[i].equals("-") || tokens[i].equals("+") || tokens[i].equals(s.peek)) 

这会执行您正在尝试执行的操作,虽然它可能不到美味。

我会坚持if语句,忘记分配权重,但如果你坚持下面的工作。

另一种选择是每个运营商映射到一个数值,如果你需要给一个数值运算符:

HashMap<String, Integer> operators = new HashMap<String, Integer>(); 

operators.put("+", 1); 
operators.put("-", 1); 
operators.put("*", 2); 
operators.put("/", 2); 
+0

我将它改为getInteger –

+0

我不知道hashmaps,但不会觉得正确使用 –

+0

@ user3427042我不认为你正在接近这个正确的方式,如果你想给你一个Set或Map的权重。虽然你可以坚持像上面这样的语句,但不必担心它。 –