2015-09-26 199 views
1

我正在編寫一個程序,該程序生成一個迷宮,然後找到一個路徑。我把所有的動作都儲存在一個名爲visitStack的堆棧中(如果我向北移動,則將「N」存儲在其中,如果東北是「NE」,則繼續)。對於我的回溯部分,我需要能夠從堆棧中獲取數據,如果我遇到了死衚衕,那麼我的步驟就會倒退,但我在這裏遇到了一些麻煩。將對象分配給字符串

我需要從堆棧中彈出一個值到String變量,但我總是得到一個編譯器錯誤。我試過使用toString,將String實例化爲一個彈出棧值作爲參數的對象,但仍然無法獲取它。我已經在這上了大約一個小時。這是代碼和錯誤消息。

String direction = visitStack.pop(); 

enter image description here

+0

你必須輸入顯式轉換。字符串方向=(字符串)visitiStack.pop() – Shriram

+1

請在您的問題中添加一些關於'visitStack'的信息,以便您可以得到更準確的答案。 –

+0

如果你的堆棧中的每個元素都是一個字符串,那麼可能應該輸入「Stack 」?我們看不到剩下的代碼,這使得它很難爲你提供幫助,否則......(但是使用'toString()'會解決編譯時錯誤,這意味着可能是別的什麼時候錯 - 但是,你還沒有告訴我們什麼。) –

回答

4

假設你正在使用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(); 
1

pop()將返回String,你將不再需要弄亂阿魯與鑄造。如果你不能,因爲某些原因,而你正被彈出的對象是String,你可以明確地投它:由於您使用的可能值的數量有限,您shloud使用類型ENUMS

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

謝謝你的工作! –

-1

安全。

用途:

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

這個枚舉可以通過'private String shortName'字段來簡化,構造函數將設置像North(「N」)'和toString(或其他方法),它將返回'shortName'。 – Pshemo

+0

@Pshemo完成修改,建議,謝謝。 – AsSiDe