我必须使用Stack和RPL (5+7)*(9-4)+12,(57+94-*12+)计算这个表达式。
我循环遍历给定数组中的每个元素。当它是一个数字时,我把它推到堆栈中。当它是一个运算符时,我从堆栈中弹出两个数字,进行计算,并将结果推后。
这是我的密码。但是valueOf方法在第33、34和53行中存在错误(类型中的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;
}
}发布于 2014-10-17 14:54:19
堆栈存储的是Objects而不是整数。你必须将它们显式地转换为Strings。如果您不告诉编译器,编译器就无法判断它们是String,所以它假设您正在尝试valueOf一个Object,这是一个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+有关继承和强制转换的其他阅读,您可以签出本教程。
https://stackoverflow.com/questions/26427622
复制相似问题