2017-01-11 76 views
1

我是新來的編碼人員,目前在iPad上使用swift遊樂場教授自己。我的代碼運行並完成了這個難題,但它繼續循環,我不知道爲什麼。我找不到任何方法來糾正此代碼。雖然我在YouTube上發現了各種不同代碼的視頻。我不只是想複製它。我想了解爲什麼這不起作用。如果需要,我可以發送一個難題的視頻。瞭解爲什麼swift代碼無法正常工作

while !isOnGem || !isOnClosedSwitch { 
    moveForward() 
    if isBlocked && !isBlockedRight { 
     turnRight() 

    } 
    if isBlocked && isBlockedRight { 
     turnLeft() 
    } 
    if isOnGem { 
     collectGem() 
    } 
    if isOnClosedSwitch { 
     toggleSwitch() 
    } 

} 
+0

你改變'isOnGem'和''isOnClosedSwitch價值? – Mina

+1

請問,任何人都可以期待回答這個問題嗎?你不給我們足夠的。我們得到了這個問題 - 循環繼續,可能是由於isOnGem和isOnClosedSwitch總是正確的 - 但是從你給我們的小代碼出現(請,這不一定是答案),turnRight(),turnLeft(), collectGem()或toggleSwitch()沒有設置循環檢查你想要的方式。你可以發佈一些額外的代碼? – dfd

+0

Dfd沒有額外的代碼來添加。我只是需要它來停止循環。但它爲我回答。感謝您的迴應。 –

回答

0

您缺少退出條件while !isOnGem || !isOnClosedSwitch將繼續循環,只要要麼條件是true,因此您的退出條件將兩個值設置爲false

請注意,在您的支票中,兩個布爾值都被倒置,因此要使條件爲false,您必須將布爾值設置爲true

既然你的代碼運行,但不退出循環,你將要檢查的更改isOnGemisOnClosedSwitch可能有兩個,就是始終false導致不能退出循環或後運行的功能之一每個檢查可能讓他們恢復到false

支票類似的代碼:

func collectGem(){ 
    ... 
    isOnGem = false 
    ... 
} 

或功能之一甚至可能沒有運行,你可以登錄各功能,如:

func toggleSwitch() { 
    print("toggleSwitchRunning") 
} 

,如果「toggleSwitchRunning」沒有打印到控制檯,檢查該設置isOnClosedSwitchtrue狀況是否正常工作

+0

謝謝你。會做出改變。 –

+0

謝謝賈森。這個反饋確實有幫助。非常感激。 –

+0

@CashmereTatum如果你需要更多的基本信息,那麼有一個[文檔](http://stackoverflow.com/documentation/swift/topics)頁面有很多有用的信息。另外[Apple's](https://developer.apple。com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#// apple_ref/doc/uid/TP40014097-CH5-ID309)swift的自帶文檔可能也有幫助 –

1

沒有關於每個if塊的功能的任何其他信息,我會說,這是由於爲isOnGemisOnClosedSwitch您的布爾值。如果功能collectGem()不會將isOnGem的值更改爲與最初設置的值相反(true或false),並且toggleSwitch()不會將isOnClosedSwitch的值更改爲其原始值的相反值,則您將被卡在循環。由於循環將「運行」,至少其中一個值保持不變。

我相信加入一個isOnGem = falseisOnClosedSwitch = false到它們各自的if塊將是解決方案。

+0

謝謝你們兩位回答這個問題。 –

相關問題