2010-11-14 24 views
1

我不知道爲什麼這個停止標準不斷失敗,但我相信它與邏輯或(||)有關。我調試過了,它似乎並沒有停止在我想要的位置,當cp(當前位置)位於數組的外圍時,該位置處於打開狀態。如何使此停止標準有效?

if(cp == start || (cp.getColumn() > 0 || cp.getColumn() < maze[0].length-1 || cp.getRow() > 0 || cp.getRow() < maze.length+1)){` 

這是一個迷宮求解算法。基本上,迷宮是由牆壁X組成的2D陣列。每個帶有X的單元格都是一堵牆,「當前位置」無法訪問它。 「當前位置」的使命是走出迷宮,這意味着它必須位於第一列或最後一列或最後一列的第一列。該算法工作得很好,但只是無法識別當前位置何時位於出口的索引處。

我很抱歉這麼模糊,我一直在這方面努力了這麼久......

+0

這是什麼?你能發佈更多的代碼或什麼? – 2010-11-14 17:23:21

+0

請詳細說明 – 2010-11-14 17:24:00

回答

1

所以,沒有以下的事情是真實的:

  • CP ==開始
  • cp.getColumn()> 0
  • cp.getColumn()<迷宮[0]。長度 - 1
  • cp.getRow()> 0
  • cp.getRow()< maze.length + 1

但是你認爲(至少)其中一個應該是真的。哪一個?

+0

迷宮的終點在迷宮[1] [8]。當前位置是它應該拒絕繼續遞歸,因爲cp.getColumn()是= maze [0] .length-1其中length-1是8. – 2010-11-14 17:37:14

+0

但是您在詢問column是否小於8,而不是它等於8.也許你想'<='。但這沒有道理;我預計它會低於限制,直到完成(所以我期望測試會立即返回「true」)。很難 - 也許不可能 - 找出沒有更多的上下文。 – 2010-11-14 22:31:53

0

正在或語句,即額外的括號是多餘的:

if(cp == start || cp.getColumn() > 0 || cp.getColumn() < maze[0].length-1 || cp.getRow() > 0 || cp.getRow() < maze.length+1){ 

我不能看到你在做什麼,但我希望這有助於至少...

0

我續真正看到你想在這裏做什麼,但猜測,「迷宮」是一個二維數組,最後的比較可能應該是maze.length-1。但是,如果cp不在數組的外圍,這會使if語句的計算結果爲true

0

我不知道您複製您的代碼正確

if(cp == start 
     || (cp.getColumn() > 0 || cp.getColumn() < maze[0].length-1 
     || cp.getRow() > 0 || cp.getRow() < maze.length+1)) { 

爲了便於理解假裝maze.length [0] -1的計算結果爲,說3,然後再考慮這一點:

cp.getColumn() > 0 || cp.getColumn() < 3 

這將是cp.getColumn()的每個值爲true,嘗試說8,是的,大於0,-99,是的這是不到3我敢打賭,你的意思是

cp.getColumn() > 0 && cp.getColumn() < 3 

如果列處於迷宮中,這將是真實的。如果你想測試走出迷宮:

cp.getColumn() <= 0 || cp.getColumn() >= 3 

(附註我用< = 3,而不僅僅是== 3刻意,這涉及案件如不止一步的舉動。)

如果你想測試,如果它在迷宮你有

if(cp == start 
     || (
      cp.getColumn() > 0 && cp.getColumn() < columnCount 
      && cp.getRow() > 0 && cp.getRow() < rowCount)) { 

,如果你想測試,如果它是迷宮外

if(cp != start 
     && (
      cp.getColumn() <= 0 || cp.getColumn() >= columnCount 
      || cp.getRow() <= 0 || cp.getRow() >= rowCount)) { 
+0

我不認爲是在同一頁 – 2010-11-14 17:53:54

+0

我誤解了你的迷宮[]片。但請再次閱讀我的最後兩條建議,我認爲他們正在給你答案。 – djna 2010-11-14 18:22:54

0

看來您正在使用的啓動條件你的OR集。你可能想要放一個! (不)在第一個括號之前。正如所寫的,我認爲else語句會成爲你停下腳步的地方。

考慮在此if語句中包裝處理代碼。

桌子檢查你的邏輯,看看你什麼時候退出。請記住,OR會停止處理第一個TRUE,並且AND會停止處理第一個FALSE。