2017-01-11 7 views
1

iPadですばやく遊び場を使ってすぐに自分のことをコーディングしてすぐに教えています。私のコードは実行され、パズルを完成させますが、それはループを続け、私はなぜそれがわかりません。私はこのコードを修正する方法を見つけることができません。私はさまざまなコードが書かれたYouTubeでビデオを見つけましたが。私はただそれをコピーしたいだけではありません。なぜこれが機能していないのか理解したい。私は必要に応じてパズルのビデオを送ることができます。あなたのif各ブロック内の機能に関するその他の情報がないスウィフトコードが正しく機能しない理由を理解してください

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に設定する必要があります。常に出ていないループまたは後に実行される機能が得られfalseある二つのうちの一つがあるかもしれないまだ

あなたのコードを実行されるため

とループに終了しません、あなたはisOnGemisOnClosedSwitchへの変更をチェックしたいと思うでしょう

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

や機能の一つでも実行していない可能性があります、あなたのような各機能をログに記録することができます。各チェックのようなコードのチェックは

falseにそれらをリセットしている場合があります
func toggleSwitch() { 
    print("toggleSwitchRunning") 
} 

と「toggleSwitchRunningは」コンソールに印刷されなかった場合、trueisOnClosedSwitchを設定した条件が

+0

Benありがとうございます。変更を行います。 –

+0

ありがとうございました。このフィードバックは本当に役立ちます。とても有難い。 –

+0

@CashmereTatumもっと基本的な情報が必要な場合は、[documentation](http://stackoverflow.com/documentation/swift/topics)ページに多くの有用な情報があります。また、[Appleの](https://developer.apple。com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#// apple_ref/doc/uid/TP40014097-CH5-ID309)swiftについての独自のドキュメントも役に立ちます –

1

、私はそれがisOnGemisOnClosedSwitchのためにあなたのブール値によるものであることを言うと思います。 collectGem()の値がisOnGemの値を最初に設定された値(真または偽)に変更されず、toggleSwitch()の値がisOnClosedSwitchの値を元の値の反対に変更しない場合は、ループ。ループは "while"で実行されるため、これらの値の少なくとも1つは変更されません。

私はisOnGem = falseisOnClosedSwitch = falseをそれぞれのifブロックに追加することが解決策であると考えています。

+0

この両方にお答えいただきありがとうございます。 –

関連する問題