

swift playgroundsで何度目かの学び直しをしています。  
画像のとおりにコードを打ちまして、赤い宝石までは順調に行くのですが、宝石のマスで止まってくれず、そのまま素通りしてしまいます。  
while文のネストが良くないのでしょうか？  
`!isOngem`
が解除されたら（宝石のマスに来たら）外枠のwhile文から抜けてcollectGemしてほしいのですが、そのまま真っ直ぐ歩いてしまいます。  
教えていただけたら助かります。  
よろしくお願いします。![画像の説明をここに入力](https://i.stack.imgur.com/ZA6cT.png)

以下が解決前のコードです。

[code]

    func move() {
        toggleSwitch()
        if isBlocked {
            turnLeft()
        } else if !isBlockedRight{
            turnRight()
        }
    }
    while !isOnGem {
        while !isOnClosedSwitch {
            moveForward()       
        }
        move()    
    }
    collectGem()
    
[/code]


CC BY-SA 4.0
2019-03-12T09:45:42.120
53385
2019-04-11T07:25:46.773
2019-04-11T07:25:46.773
19110
24718
question
swift アルゴリズム
swift playgrounds while文のネストについて


ヒント：`!isOnClosedSwitch` が満たされるまで内側の while ループから抜け出せず、`isOnGem` かどうかはチェックされません。


CC BY-SA 4.0
2019-03-12T10:57:13.833
53387
2019-03-12T10:57:13.833
19110
53385
answer


Nekketsuuu様にいただいたアドバイスを参考に、以下の修正で解決できました。  
ありがとうございました！

[code]

    func move() {
        moveForward()
        if isOnClosedSwitch {
            toggleSwitch()
        }
        if isBlocked {
            turnLeft()
        }
        if !isBlockedRight {
            turnRight()
        }
    }
    
    while !isOnGem {
        move()
    }
    collectGem()
    
[/code]


CC BY-SA 4.0
2019-04-11T07:14:03.983
54089
2019-04-11T07:25:19.730
2019-04-11T07:25:19.730
19110
24718
53385
answer