为什么从堆栈转换为int不能在Java中运行?

时间:2009-02-21 17:08:32

标签: java casting

我正在尝试将存储在堆栈中的char转换为整数,这就是我所做的。

operands = new StackLinked();

if ( (a == '0') || (a == '1') || (a == '2') || (a == '3') || (a == '4') || 
     (a == '5') || (a == '6') || (a == '7') || (a == '8') || (a == '9') )
{
   operands.push(a);   /*Stor operands in the stack operands.*/
}

//This line crushes my program. I don't know why.
int op1 = ((Integer)operands.peek()).intValue();

8 个答案:

答案 0 :(得分:7)

您尚未展示a的声明,但我怀疑它的类型为char。然后将其自动装箱到Character,因此当你施放到Integer时,施法会失败。

如果您更改要使用的代码:

operands.push((int) a);

应该从char转换为int然后转换为Integer并且您将离开。

或者,使用:

// Implicit conversion from char to int
int op1 = ((Character) operands.peek()).charValue();

编辑:请注意,当a ='1'时,上述解决方案最终会给出op1 = 49,当a ='2'时,op2 = 50等等。如果你真的想要op1 = 1当a ='1'时你可以使用Character.digit或(因为我们已经知道'a'在'0'到'9'的范围内)你可以减去'0',即

operands.push((int) (a-'0'));

int op1 = ((Character) operands.peek()).charValue() - '0';

在第一种情况下,演员实际上是多余的,因为减法的结果将是int而不是char - 但为了清楚起见,我会把它留在那里。

答案 1 :(得分:1)

你必须使用1.5。所以这是另一种正确的方法:

if (a >= '0' && a <= '9') {
    operands.push(a);
}

char c = operands.peek();
int op1 = (int) c; //check Character.isDigit(c), if there is other stuff in the stack

答案 2 :(得分:1)

将char转换为int值的简单方法是执行

if (a >= '0' && a <= '9') {
    operands.push(a - '0'); // converts a char to an int.
}
int op1 = (Integer) operands.peek();

答案 3 :(得分:0)

你确定你真的把任何东西推到了堆栈上吗?如果没有,则抛出EmptyStackException。你有什么例外吗?

答案 4 :(得分:0)

你的例子可能有点含糊不清,这是我的假设:

  • 您正在使用Java 1.5 langauge功能(由于装箱/拆箱)。

  • 操作数的行为类似于Stack&lt; Character&gt;();

当你将一个字符串推入堆栈时,它被装箱为一个字符。您不能将Character实例强制转换为Integer。您必须使用获取原始数值,然后将其转换为整数原语。

试试这个:

int op1 = (int) operands.peek().charValue();

答案 5 :(得分:0)

如果没有看到StackLinked的定义,这真的很难,那是你自己的一个类吗?

我可以想到几个选择: 堆栈在某种程度上是空的(例如,a不是这些字符之一)。

或者'a'在堆栈中保存为Character(而不是char),然后转换为Integer失败。您可能需要先从角色中获取char。

答案 6 :(得分:0)

你正在推动Char,而不是整数。你需要这样说:

Char op1 = (Char)operands.peek();
int opcode = Char.digit(op1.charValue(),10);

(我的Java有点生疏,很抱歉,如果某些方法名称略有错误)

此外,您的 Peek 方法是否返回null(因为 if 语句评估为false),那么您的代码将崩溃。

答案 7 :(得分:0)

将char转换为int

最简单的方法是:

operands.push(Integer.parseInt(Character.toString(a)));