2012-12-31 64 views
0

我想製作逆波蘭表示法算法,但是我的代碼不工作。任何人都能解釋我爲什麼? 在我的代碼中,我想採取字符,直到「/ + - *」標記。如果這個令牌是下一個操作,那就包含在case中。逆波蘭表示法Java

import java.util.Stack; 
import java.util.StringTokenizer; 

import javax.swing.JOptionPane; 

public class ONP { 

    public static void main(String[] args) { 
     Stack<Double> stack = new Stack<Double>(); 
     double number1; 
     double number2; 

     String x = JOptionPane.showInputDialog("Tokens"); 
     StringTokenizer str = new StringTokenizer(x); 

     while (str.hasMoreElements()) { 
      str.nextElement(); 
      stack.push((Double) str.nextElement()); 

      for (int i = 0; i < x.length(); i++) { 

       switch (x.charAt(i)) { 
       case '+': 
        number1 = stack.pop(); 
        number2 = stack.pop(); 
        System.out.println(number1 + number2); 
        break; 
       case '-': 
        number1 = stack.pop(); 
        number2 = stack.pop(); 
        System.out.println(number1 - number2); 
        break; 
       case '/': 
        number1 = stack.pop(); 
        number2 = stack.pop(); 
        System.out.println(number1/number2); 
        break; 
       case '*': 
        number1 = stack.pop(); 
        number2 = stack.pop(); 
        System.out.println(number1 * number2); 
        break; 
       } 

      } 
      System.out.println(stack.pop()); 
     } 
    } 

} 

我想寫它沒有StringBuilder或者那樣。

輸入:

2 2 + 2/2/

輸出:

(2+2)/2/2 

回答

3

嘗試,而不是這個

String s1; 



while (str.hasMoreElements()) 
{ 
    s1 = str.nextElement(); 

    if(s1.equals("+") || s1.equals("-") || s1.equals("*") || s1.equals("/")) 
    { 
      switch (s1) 
      { 
       case '+': 
        number1 = stack.pop(); 
        number2 = stack.pop(); 
        System.out.print(number1 + " + " + number2); 
        break; 
       case '-': 
        number1 = stack.pop(); 
        number2 = stack.pop(); 
        System.out.print(number1 +" - "+ number2); 
        break; 
       case '/': 
        number1 = stack.pop(); 
        number2 = stack.pop(); 
        System.out.print(number1 +"/"+ number2); 
        break; 
       case '*': 
        number1 = stack.pop(); 
        number2 = stack.pop(); 
        System.out.print(number1 +" * "+ number2); 
        break; 
       } 
     } 
     else 
     { 
       stack.push(s1); 
     } 

    } 

while (str.hasMoreElements()) { 
     str.nextElement(); 
     stack.push((Double) str.nextElement()); 

     for (int i = 0; i < x.length(); i++) { 

      switch (x.charAt(i)) { 
      case '+': 
       number1 = stack.pop(); 
       number2 = stack.pop(); 
       System.out.println(number1 + number2); 
       break; 
      case '-': 
       number1 = stack.pop(); 
       number2 = stack.pop(); 
       System.out.println(number1 - number2); 
       break; 
      case '/': 
       number1 = stack.pop(); 
       number2 = stack.pop(); 
       System.out.println(number1/number2); 
       break; 
      case '*': 
       number1 = stack.pop(); 
       number2 = stack.pop(); 
       System.out.println(number1 * number2); 
       break; 
      } 

     } 
     System.out.println(stack.pop()); 
    }