【備忘録】Java_コレクション
こんにちは、のわです。
今回は勉強中のJavaからコレクションについて備忘録を残します。
前回の記事で勇者VSドラゴンの記事をあげました。
nowa-0402.hatenablog.com
そこから下記内容を追加して現在プログラム修正中です。
・職業魔法使いを増やす。
・モンスターを増やす
魔法使いを増やしたことで勇者はパーティを組む必要が出てきました。
そこで、勉強したコレクションを使ってパーティ化することにしました。
※前提
勇者=Heroクラス
魔法使い=Wizardクラス
勇者と魔法使いの親クラス=Characterクラス
【Main.java】
// ArrayListの記述省略のためimportしておく import java.util.*: // 勇者と魔法使いを生み出す Character c1 = new Hero(); Character c2 = new Wizard(); // 勇者と魔法使いでパーティを組む ArrayList<Character> party = new ArrayList<>(); party.add(c1); party.add(c2);
コレクションと配列の違う点は要素を随時追加できる点です。
// Character型のコレクション『party』を作成 ArrayList<Character> party = new ArrayList<>(); // partyに対して勇者と魔法使いのインスタンスを格納 party.add(c1); party.add(c2);
上記で言うところの『.add()』メソッドが追加の役割を果たしています。
配列は事前にいくつ入れるのか決める必要があり
そこから要素を追加することは出来ませんでした。
コレクション(ArrayListの場合)だと
・要素追加は『.add(インスタンスの型)』
・要素削除は『.remove(int)』
と楽に追加、削除や取り出しが可能です。
では、コレクション化すると何が出来るようになるか。
実際にコレクションを活かしたプログラムを作ってみました。
【Main.java】
import java.util.*; // 勇者と魔法使いを生み出す Character c1 = new Hero(); Character c2 = new Wizard(); // 勇者と魔法使いでパーティを組む ArrayList<Character> party = new ArrayList<>(); party.add(c1); party.add(c2); // ドラゴンを生み出す Dragon d = new Dragon(); // ドラゴンがパーティに火を吹く d.fireBless(party);
【Dragon.java】
// ドラゴンがパーティに火を吹く import java.util.*; public void fireBless(ArrayList<Character> party) { System.out.println("ドラゴンは全体に火を吹いた!"); for(int i = 0; i < party.size(); i++) { party.get(i).hp -= 20; System.out.println(party.get(i).name + "は20ポイントダメージを受けた!"); } }
コレクションはデータ型、配列と同様、引数に指定することが可能です。
実際、どんな処理をしているのか簡単に説明します。
public void fireBless(ArrayList<Character> party) {}
メソッドの引数にコレクションを指定しています。
変数名は任意の名前をつけます。
今回はMain.javaで付けたpartyにしています。
for(int i = 0; i < party.size(); i++) { party.get(i).hp -= 20; System.out.println(party.get(i).name + "は20ポイントダメージを受けた!"); }
今回のポイントになります。
引数でもらった勇者御一行にどうやってダメージを与えるか
下記で詳細を説明します。
for(int i = 0; i < party.size(); i++) {}
for文で何回繰り返すか設定しています。
『.size()』メソッドは格納されている要素数を返します。
今回、要素数は勇者と魔法使いの2人です。
つまり、『i < 2』となり、iが2になったら処理が終了します。
party.get(i).hp -= 20; System.out.println(party.get(i).name + "は20ポイントダメージを受けた!");
この文でダメージを与えています。
『.get(int)』メソッドはint番目の要素を取り出します。
つまり、『party.get(i).hp -= 20;』は
『partyのi番目にいるキャラのHPを20引け』
という意味になります。
iはfor文で定義しています。
・繰り返し1回目なら『i = 0』となり、勇者が対象
・繰り返し2回目なら『i = 1』となり、魔法使いが対象
になります。
因みに、コレクションは配列と同じく要素は『0』から始まります。
『1』からでは無いので注意してください。
今回はコレクションを使ったプログラムを紹介しました。
私自身、コレクションを勉強した当初は
「何に使えるのこれ」という感じでした。
ですが、コードを書きながら、色々試行錯誤をしていくうちに
「色々できるやん!コレクションすごい!」と気づきました。
やっぱり、考えながらコードを書くのが一番楽しくて、勉強になりますね。
なお、コレクションは引数だけではなく、戻り値にも指定できます。
是非活用してみてください!
今回も最後まで見ていただきありがとうございました!