【问题标题】:Reverse Polish Notation Java反向波兰表示法Java
【发布时间】:2012-12-31 10:42:45
【问题描述】:

我想制作反向波兰表示法算法,但我的代码不起作用。谁能解释我为什么? 在我的代码中,我想取字符,直到 "/+-*"tokens 。如果此标记是下一个,则进行操作,其中包含 in case 。

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

【问题讨论】:

    标签: stack switch-statement case token rpn


    【解决方案1】:

    试试这个

    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());
        }
    

    【讨论】:

    • 您的代码存在编译问题。 str.nextElement() 返回一个对象而不是字符串。开关盒标签也需要用双引号而不是单引号,例如“+”而不是“+”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    相关资源
    最近更新 更多