-2

我无法从堆栈中提取字符串数据并将其转换为 int 以执行算术运算,它一直告诉我我不能将字符串转换为 int,反之亦然,但是我不知道任何其他替代方法。这是我的代码:

int t1 = Integer.parseInt((String)stk.pop());
int t2 = Integer.parseInt((String)stk.pop());

int z;
switch(current)    {
    case '+': 
         z = t2 + t1;
        break;

    case '-':
        z = t2 -t1;
        break;

    case '*':
        z =  t2 * t1;
        break;

    case '/': 
        z =  t2 / t1;
        break;

    default: z = 0;

}

stk.push(z);
if(!moreSymbols.hasNext()) {
    String result = (String)stk.pop();
}
4

2 回答 2

1

您的堆栈上有String对象,稍后您将推入堆栈计算结果 whitch 是int。现在,您正试图将您的结果 ( int) 弹出为StringinString result = (String)stk.pop(); 我建议将您的数据作为整数保存在堆栈中,或者简单地交换 stk.push(z);到这个stk.pust(String.valueOf(z));

于 2013-11-06T14:20:07.497 回答
0

在这一行中,您将一个整数压入堆栈:

stk.push(z);

因此,稍后当您尝试弹出字符串时它会失败。如果上面的所有内容都必须是字符串,请确保将字符串推回:

stk.push(String.valueOf(z));

如果这个“Stack”类是java.util.Stack,或者是另一个支持泛型的类,你可以通过在声明它时告诉编译器这个堆栈仅限于字符串来省去一些麻烦:

Stack<String> stk = new Stack<>();

然后编译器将防止您意外推送整数,并且您无需在弹出时手动强制转换为字符串。有关更多解释,请参阅泛型教程。

于 2013-11-06T14:20:48.063 回答