【问题标题】:Reverse Polish Notation and stack. Error with valueOf method. Java反向波兰表示法和堆栈。 valueOf 方法出错。爪哇
【发布时间】:2014-10-17 14:49:23
【问题描述】:

我必须使用 Stack 和 RPL (57+94-*12+) 计算这个表达式 (5+7)*(9-4)+12 >

我遍历给定数组中的每个元素。当它是一个数字时,我将它压入堆栈。当它是一个运算符时,我从堆栈中弹出两个数字,进行计算,然后将结果推回。

所以,这是我的代码。但是使用 valueOf 方法的第 33、34 和 53 行有错误( Integer类型的valueOf(String)方法不适用于参数(Object))

你能帮帮我吗?谢谢!

package mainPackage;
import java.util.*;

public class Main {

    public static void main(String[] args) {

        String[] massive = {"5", "7", "+", "9", "4", "-", "*", "12", "+"};

        int result = calculate(massive);
        System.out.println(result);

    }

    public static int calculate(String[] mas) {
        Stack stack = new Stack();

        int sum = 0;
        String operators = "+-*/";

        for (String s : mas) {

            if ( !operators.contains(s)) {
                stack.push(s);
            }
            else {
                int a = Integer.valueOf(stack.pop());
                int b = Integer.valueOf(stack.pop());

                switch (s) {
                    case "+":
                        stack.push(String.valueOf(a + b));
                        break;
                    case "-":
                        stack.push(String.valueOf(b - a));
                        break;
                    case "*":
                        stack.push(String.valueOf(a * b));
                        break;
                    case "/":
                        stack.push(String.valueOf(b / a));
                        break;
                }
            }

        }
        sum = Integer.valueOf(stack.pop());

        return sum;
    }

}

【问题讨论】:

    标签: java stack rpn


    【解决方案1】:

    堆栈存储的是Objects,而不是整数。您必须将它们显式转换为字符串。编译器无法在没有您告知的情况下判断它们是字符串,因此它假定您正在尝试 valueOfObject,这是 String 的超类。

                int a = Integer.valueOf((String)stack.pop());
                int b = Integer.valueOf((String)stack.pop());
    

    或者,您可以在堆栈声明中提及您打算存储的类型。

        Stack<String> stack = new Stack<String>(); //Java 6
    

        Stack<String> stack = new Stack<>(); //Java 7+
    

    有关继承和强制转换的更多信息,您可以查看this tutorial

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      相关资源
      最近更新 更多