2015-08-26 40 views
-3

我試圖做卡雷爾機器人分配1(midPointFindingKarel),因爲我是新來的Java我不明白爲什麼我的代碼不完全讀取方法movingWest。就我的邏輯而言,它應該(在完成'movingEast'方法完成之後)。由於我是初學者,我確信我錯過了一些重要的東西。有人能幫我解答一下,這樣我就能理解這個邏輯。我已經開始考慮在Java編程方法(CS106A)課程可在斯坦福大學網站

import stanford.karel.*; 

public class MidpointFindingKarel1 extends SuperKarel { 
    public void run() { 
     puttingBeepers(); 
     while(beepersPresent()) { 
      movingEast(); 
      movingWest(); 
     } 
    } 

    private void puttingBeepers() { 
     while(frontIsClear()) { 
      if (noBeepersPresent()) { 
       putBeeper(); 
      } 
      move(); 
     } 
     putBeeper(); 
    } 

    private void movingEast() { 
     cornerBeepersPickUp(); 
     while(beepersPresent()) { 
      if(frontIsClear()) { 
       move(); 
      } 
     } 
    } 

    private void movingWest() { 
     cornerBeepersPickUp(); 
    } 

    private void cornerBeepersPickUp() { 
     turnAround(); 
     pickBeeper(); 
     move(); 
    } 
} 
+0

我猜你是停留在'movingEast' while循環,這意味着'beepersPresent'總是返回真正。你可以驗證任何方式嗎? – 7thFox

+0

這正是發生的事情'beepersPresent'總是如此,所以它不會去下一行。這是一個無限循環。非常感謝您的回答。 – mvgCode

+0

那麼,如果你不介意接受它,如果你認爲它有幫助,那麼我會做出回答。 (你甚至會得到一個小的代表獎金)。很高興能幫上忙。 – 7thFox

回答

0

正如其他的答案說那是因爲你的循環從movingeast不會退出。作爲解決方案,你會做什麼,作爲一個「嵌套」語句,這樣你包括if-else語句簡稱:

> while(beeperspresent()) { 
 
if (frontIsClear) { 
 
movingeast; 
 
} else { 
 
movingwest; 
 
}

(注:frontisClear條件只是衆多的一個可能的選擇。你可以把它改成只要它是一個法律條件,任何適合您的任務。)

0

很難說,考慮到上述代碼中的某些方法沒有參考塊。在這裏,您可能想查看一下while和Do-While循環之間的區別,因爲它可能與beepersPresent()有關,它在moveEast()中打破循環。

0

你的問題是,你是不是退出while循環movingEast。這意味着beepersPresent總是返回true。

相關問題