スポンサーリンク
スポンサーリンク
解答例
let switchCounter = numberOfSwitches
var gemCounter = 0
while gemCounter < switchCounter {
if isOnGem {
collectGem()
gemCounter = gemCounter + 1
}
if isBlocked {
turnRight()
}
moveForward()
}
解説
『定数』が出てきました。
定数とは、『変更できない値を保存するための、名前の付いた入れ物』のことです。
変数は変更できる値だったのに対して、定数は一度値を代入すると、ずっと変わらないということですね。
この課題では、最初からlet switchCounter = numberOfSwitches
が設定してあります。
スイッチの数はランダムに変化するけど、numberOfSwitches(スイッチの数)がswitchCounterという定数でわかるようになっています。
そして、宝石カウンターは数えていくので数値は変化します。
変数(var)で宣言しておけばいいですね。
そのあとは、whileループでwhile gemCounter < switchCounter
と置けば
スイッチの数と同じ数になるまで、宝石集めを繰り返します。
『同じ数』なので、『=』を使いたくなってしまいますが、
もし=を使うと、例えばスイッチが全部で6つとして
宝石の数 6 = スイッチの数 6
を確認して、その後のif文を実行してしまい、宝石の数が7になってしまいます。
そして、
宝石の数 7 = スイッチの数 6
がfalseなので、やっとループが止まります。
こうすると結局、宝石の数とスイッチの数が同数ではないのでエラーになってしまいますね。
要点まとめ
・『定数』を宣言する時は、letを使う
スポンサーリンク