中缀到后缀评估

时间:2017-10-01 01:34:43

标签: java casting type-conversion

如何将char转换为Integer类型?

int p2 = (int)stack2.pop();     
int p1 = (int)stack2.pop();       
int res = result(p2, p1, calStr.charAt(i));   

stack2.push(res);

我执行了上述方法,但获得了runtime errorjava.lang.Character无法投放到java.lang.Integer

  

主题"main" java.lang.ClassCastException:中的异常
  java.lang.Character无法投放到java.lang.Integer

1 个答案:

答案 0 :(得分:0)

说明

您无法直接将Character投射到Integer,这些对象。只有当我们讨论数据类型 charint时,它们之间的演员才有效。

虽然Java确实自动框 -unboxes IntegerintCharacterchar和反之亦然,它不会自动使用此技术在IntegerCharacter之间进行快速转换。

解决方案

当然,您可以进行如下转换:

Character -> char -> int -> Integer

因此代码可能如下所示:

Character itemAsCharacter = stack2.pop();
char itemAsChar = itemAsCharacter.charValue();
int itemAsInt = (int) itemAsChar;
Integer itemAsInteger = Integer.valueOf(itemAsInt);

或简而言之:

// Last step uses the implicit auto-boxing of int -> Integer
Integer item = (int) stack2.pop().charValue();

向后的方向类似:

Integer resultAsInt = ...
Character result = (char) resultAsInt.intValue();

stack2.push(result);

注意

请注意,类Stack,也是Vector,是Java中过时的类。有些功能相同的类提供了更多的方法,更强大,更简单。 LIFO 数据结构的示例列在接口Deque下,最常用的实现是LinkedList,还有一个数组变体,ArrayDeque

以下是documentation of Stack的相关摘录:

  

一套更完整,更一致的LIFO堆栈操作   由Deque接口及其实现提供,应该   优先使用本课程。