将对象分配给字符串

时间:2015-09-26 16:44:42

标签: java string object stack

我正在编写一个生成迷宫然后找到路径的程序。我将所有动作存储到一个名为visitStack的堆栈中(如果我向北移动,我将“N”存储到其中,如果是东北则将“NE”存储在其中)。对于我的回溯的一部分,我需要能够从堆栈中获取数据,并且如果我走到了死胡同,我可以反转我的步骤,但是我在这里遇到了麻烦。

我需要将从堆栈弹出的值分配给String变量,但我总是遇到编译器错误。我已经尝试使用toString,将弹出的堆栈值作为参数实例化为一个对象,但仍然无法获取它。我已经在这上面了大约一个小时。这是代码和错误消息。

String direction = visitStack.pop();

enter image description here

3 个答案:

答案 0 :(得分:4)

假设您正在使用java.util.Stack我怀疑您没有描述它应该存储的元素类型,这就是编译器将返回类型pop视为Object的原因(常见)所有类型的祖先。)

还假设堆栈应该只存储String元素,它应该声明为

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

现在编译器应该看到pop()的返回类型为String,这样您就可以将结果存储在其他String类型引用中

String direction = visitStack.pop();

当您确定堆栈只能包含字符串时,上面的解决方案是 首选 ,但是如果还有其他一些元素,则需要将返回的对象显式转换为String (如果你确定它将是String的实例),如

String direction = (String) visitStack.pop();

或者如果您不确定将返回哪个对象调用toString()方法来获取其字符串表示形式:

String direction = visitStack.pop().toString();

答案 1 :(得分:1)

如果您将堆栈定义为Stack<String>pop()将返回String,您无需乱扔乱码。如果由于某种原因你不能,并且你肯定是弹出的对象是String,你可以明确地转换它:

String direction = (String)visitStack.pop();

答案 2 :(得分:-1)

由于您使用的是有限数量的可能值,因此您需要使用ENUMS作为安全类型。

使用:

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;
}
}