スポンサーリンク
スポンサーリンク
解答例
while !isOnGem {
while !isBlocked {
moveForward()
if isOnClosedSwitch {
toggleSwitch()
}
}
turnRight()
}
collectGem()
解説
前回同様、『宝石の上に到着するまで実行』するループを考えます。
『while !isOnGem
』とすればいいですね。
そして、宝石の上に来たら、collectGem()
でゴールです。
ワープもあってややこしいですが、よく見たら右折しかないのが分かります。
『行き止まりになるまで実行』するwhileループを、先ほどのループの中に設置します。
スイッチはonとoffが入り混じっているため、ifで確認しながら進みます。
while !isBlocked {//行き止まりではない場合に実行されるコード}
から外れると、
turnRight()
し、宝石があるところまでそれを繰り返します。
また、少し応用して、ゴールの条件を『行き止まり、かつ、右側も行き止まり』にしてみました。
AND演算子(&&)を使うと、設置できますね。
!を使っているので、『行き止まりではなくて、右側も行き止まりではない場合』に実行されます。
while !isBlocked && !isBlockedRight {
while !isBlocked {
moveForward()
if isOnClosedSwitch {
toggleSwitch()
} else if isOnGem {
collectGem()
}
}
turnRight()
}
曲がり角は、いつも右側に行けるわけですから、
『前も右も行き止まり』を条件にすると、本当の行き止まりまで行ってストップとなります。
大枠のwhileループの中身は、『行き止まりまで実行』されるwhileループで、
スイッチの切り替えと宝石を調べながら進みます。
whileループと条件分岐の合わせ技は、使い道がグッと広がりますね。
要点まとめ
・whileループをネストすると、大きな条件と小さな条件をまとめてコーディングすることができる
スポンサーリンク