将对象分配给字符串
我正在编写一个程序,该程序生成一个迷宫,然后找到一个路径。我把所有的动作都储存在一个名为visitStack
的堆栈中(如果我向北移动,则将“N”存储在其中,如果东北是“NE”,则继续)。对于我的回溯部分,我需要能够从堆栈中获取数据,如果我遇到了死胡同,那么我的步骤就会倒退,但我在这里遇到了一些麻烦。将对象分配给字符串
我需要从堆栈中弹出一个值到String
变量,但我总是得到一个编译器错误。我试过使用toString
,将String实例化为一个弹出栈值作为参数的对象,但仍然无法获取它。我已经在这上了大约一个小时。这是代码和错误消息。
String direction = visitStack.pop();
假设你正在使用java.util.Stack
我怀疑你没有说明它应该存储什么类型的元素,这就是为什么编译器看到返回的pop
类型为Object
(所有的共同祖先类型)。
而且假设栈应该只存储字符串元素应该被声明为
Stack<String> visitStack = new Stack<String>();
现在的编译器应该看到的pop()
返回类型为String
,这将使你的结果存储在其他String
型参考
String direction = visitStack.pop();
上述方案是喜欢红当你确信堆栈只能包含字符串,但如果有一些其他的元素,你将需要显式地强制转换返回的对象为String(如果您确信这将是字符串的情况下),如
String direction = (String) visitStack.pop();
,或者如果你不知道将返回什么对象调用toString()
方法来获得它的字符串表示:如果你定义堆栈Stack<String>
String direction = visitStack.pop().toString();
,pop()
将返回String
,你将不再需要弄乱阿鲁与铸造。如果你不能,因为某些原因,而你正被弹出的对象是String
,你可以明确地投它:由于您使用的可能值的数量有限,您shloud使用类型ENUMS
String direction = (String)visitStack.pop();
谢谢你的工作! –
安全。
用途:
Stack<Direction> visitStack=new Stack<>();
visitStack.push(Direction.EAST);
Direction dir=visitStack.peek();
String dir2=visitStack.pop().toString();
System.out.println(dir);
System.out.println(dir2);
你的方向应该是这样的:
public enum Direction {
North("N"), NORTH_WEST("NW"), NORTH_EAST("NE"), EAST("E")
, SOUTH_EAST("SE"), SOUTH("S"), SOUTH_WEST("SW"), WEST("W");
private String shortName;
private Direction(String shortName) {
this.shortName = shortName;
}
@Override
public String toString() {
return this.shortName;
}
}
你必须输入显式转换。字符串方向=(字符串)visitiStack.pop() – Shriram
请在您的问题中添加一些关于'visitStack'的信息,以便您可以得到更准确的答案。 –
如果你的堆栈中的每个元素都是一个字符串,那么可能应该输入“Stack”?我们看不到剩下的代码,这使得它很难为你提供帮助,否则......(但是使用'toString()'会解决编译时错误,这意味着可能是别的什么时候错 - 但是,你还没有告诉我们什么。) –