2015-09-26 104 views
0

因此,我正在編寫一個隨機生成迷宮,然後找到解決方案的程序。我的部分代碼包含一個回溯算法,如果我遇到了死衚衕,那麼我會回退。帶字符串的回溯開關語句

每次我移動時,我都會記錄一個堆棧中的移動(北方爲「N」,東北方爲「NE」)。爲了回溯,我彈出堆棧的頂層元素,並使用switch語句來移動彈出方向的相反方向。

當我嘗試編譯我的代碼時,它給了我一個錯誤,即彈出的堆棧對象不能轉換爲int,但是我看到了用於其他程序中的switch語句的String。我認爲toString方法會自動將對象轉換爲switch語句的String。我已經嘗試使用toString手動使用彈出的值作爲參數,但也沒有工作。這是代碼和錯誤消息。

switch(visitStack.pop()) 
{ 
//      have to backtrack the opposite direction i previously went 
    case "N": nowR++; 
       visited[nowR][nowC] = 'N'; 
       break; 
    case "NE": nowR++; 
       nowC--; 
       visited[nowR][nowC] = 'N'; 
       break; 
    case "E": nowC--;; 
       visited[nowR][nowC] = 'N'; 
       break; 
    case "SE": nowR--; 
       nowC--; 
       visited[nowR][nowC] = 'N'; 
       break; 
    case "S": nowC--; 
       visited[nowR][nowC] = 'N'; 
       break; 
    case "SW": nowR--; 
       nowC++; 
       visited[nowR][nowC] = 'N'; 
       break; 
    case "W": nowC++; 
       visited[nowR][nowC] = 'N'; 
       break; 
    case "NW": nowR++; 
       nowC++; 
       visited[nowR][nowC] = 'N'; 
       break; 
} 

enter image description here

的發藍了部分具有個人信息。

+0

不應該'S'的情況是'nowR - '而不是'nowC - '? –

+0

只是爲了驗證你的假設,如果你將'visitStack.pop()'保存到一個變量,並使用'switch',它是否工作?當你這樣做時,那個變量有什麼價值? –

+0

我會嘗試,是的,現在應該C - –

回答

1

java versions below 7它不會支持Strings in Switch Case

選擇將是否則,如果梯子使用.Equals()方法比較字符串

您可以在開關罩使用枚舉

+0

無賴....謝謝 –

+0

你可能要注意,你不應該使用下面的任何東西無論如何Java 8。 – Clashsoft

+0

包含的圖片似乎表明他正在使用1.8.0_20 - 是不是Java 8? (我不是Java程序員,但使用Google搜索返回「Java™SE開發工具包8,更新20發行說明」) –