首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反向波兰符号和堆栈。valueOf方法出错。Java

反向波兰符号和堆栈。valueOf方法出错。Java
EN

Stack Overflow用户
提问于 2014-10-17 14:49:23
回答 1查看 209关注 0票数 0

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

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

这是我的密码。但是valueOf方法在第33、34和53行中存在错误(类型中的valueOf(String)方法不适用于参数(Object) )

你能帮帮我吗?谢谢!

代码语言:javascript
复制
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;
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-17 14:54:19

堆栈存储的是Objects而不是整数。你必须将它们显式地转换为Strings。如果您不告诉编译器,编译器就无法判断它们是String,所以它假设您正在尝试valueOf一个Object,这是一个String的超类。

代码语言:javascript
复制
            int a = Integer.valueOf((String)stack.pop());
            int b = Integer.valueOf((String)stack.pop());

或者,您可以在堆栈的声明中提到要存储的类型。

代码语言:javascript
复制
    Stack<String> stack = new Stack<String>(); //Java 6

代码语言:javascript
复制
    Stack<String> stack = new Stack<>(); //Java 7+

有关继承和强制转换的其他阅读,您可以签出本教程

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26427622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档