コウです、よろしくお願いします!
「ゼロからプログラミングを始める」人に役立つ情報を発信しています。
今回はDay87「インデックスの範囲外エラーを直す」です。どうぞ!!
解答例
まずは解答例を確認しましょう。
コードは次のようになります。
解答例を動画で確認する
上記のコードを実行した結果がこちらになります。
ステージ攻略「インデックスの範囲外エラーを直す」
ステージを攻略していきましょう!
クリア条件
今回のクリア条件は、
『コードを正常に実行する』ことです。
配列の項目を指定してその項目にコマンドを実行させることができるのですが、
そもそも無い項目にコマンドを実行させることはできません。
これが範囲外エラーですね。
あらかじめ入力されているコードの中からエラーを探して
正しいコードにするのが今回の目的です。
空の配列を宣言
今までは、座標を入れるための空の配列を宣言していました。
今回は、キャラクターを入れるための空の配列です。
var teamBlu: [Character] = [ ]
『 : 』の後が『[Character]』ですよね。
間違えないように注意しましょう!
空の配列に項目を追加する
先ほど宣言した配列teamBluに項目を追加していきます。
for i in 1…9 {
teamBlu.append(Character(name: .blu))
}
bluを追加する処理をforループで9回繰り返します。
つまり、インデックスは『0〜8まで』です。
変数を宣言する
前回などは項目が座標だったので、
インデックスを指定すればそのまま座標を指定できていました。
しかし今回は『Character』の配列です。
列の数字を後で変更する必要があるので、変数を宣言しておきます。
var columnPlacement = 0
配列を参照しながらループ
『teamBlu』配列を参照して、bluを配置していきます。
for blu in teamBlu {
world.place(blu, at: Coordinate(column: columnPlacement, row: 4))
columnPlacement += 1
}
行の値は4で固定です。
列の値は先ほど宣言した変数を使うことで、
bluを1体配置するごとに+1されていきます。
こうすることで、(0,4)(1,4)(2,4)…というように
1マスずつずらして指定することができます。
範囲外エラーを見つける
最後に各マスに配置されたbruの行動が書かれています。
インデックスは確認したように0〜8でしたよね。
teamBlu[0].jump()
teamBlu[2].collectGem()
teamBlu[4].jump()
teamBlu[6].collectGem()
teamBlu[8].jump()
teamBlu[10].collectGem()
『 [ ] 』の中に書かれている数字がインデックスです。
インデックスは0〜8しかないのに、
10と書かれたものがありますね。
範囲外エラーです。
これは丸ごと削除しましょう。
コードを実行すればステージクリアです!
まとめ:インデックスの範囲外エラーを直す
コードはあらかじめ入力されていましたが、
何が書かれているのかを自分で理解できるようになりましょう。
そうすることで今回のようなエラーを発見することができます!
今回のポイントを振り返りましょう。
- 項目に無いインデックスを指定すると範囲外エラーになる。
次回はDay88「地形を作る」でお会いしましょう!それでは!!