2014-03-28 128 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的權重。雖然你可以堅持像上面這樣的語句,但不必擔心它。 –