[JAVA]JAVAで構造体配列を扱う方法
2009年 11月 05日
正確には「無い」のではなく、クラスを宣言して代用するらしい。
細かい文法は抜きにして「考え方」を忘れないようにメモっておく。
class clsHuman {
String strName = "";
int intAge = 0;
boolean blnWaki = false;
}
サンプルとして人物のデータ(名前、年齢、脇の有無)を取得するためのクラスを宣言。
で、実際に関数内で構造体(のようなもの)を使用するときは以下のように宣言する。
void main(){
clsHuman Reinmu = new clsHuman();
Reinmu.strName = "博麗霊夢";
Reinmu.blnWaki = true;
Reinmu.intAge = 15;
}
さて、実際にプログラムを組むならば「複数人のデータを1つにまとめて管理したい!」という欲望が出てくる。ArrayList関数に納めるという手もありますが、配列で管理したほうがわかりやすい場合もある。
そんなわけで構造体を配列化したサンプルがこちら↓
void main(){
clsHuman[] Jinbutsu = new clsHuman[3]; //とりあえず3人分
Jinbutsu[0].strName = "博麗霊夢";
Jinbutsu[0].blnWaki = true;
Jinbutsu[0].intAge = 15;
}
「Jinbutsu[0].strName = "博麗霊夢";」の行でぬるぽしちゃいます。
「直接データ入れてるのになぜNullなんだ??」と疑問に思い調べてみると、
左辺側、つまり「Jinbutsu[0].strName」が存在しないからなんだそうな。
更に調べてみるとなるほど納得。
「clsHuman[] Jinbutsu = new clsHuman[3]; 」はC言語に例えるならポインタを宣言しただけらしい。
それぞれの要素を更に初期化して初めて構造体変数として使用できる。
わかりやすく例えるなら、校庭に石灰で目印を書いて「ここに箱を置いてね」って状態のまま、実際に箱置いてないからボール投げても入らないよって事。箱を置く(初期化)ことで初めてボールを格納できる。
(オイラの理解の範囲内での解釈なので、鵜呑みにしないように)
そんなわけで正しく構造体を扱うには、こんな感じに書くといいらしい。
void main(){
clsHuman[] Jinbutsu = new clsHuman[3]; //とりあえず3人分
//配列を初期化
for(int i = 0; i < Jinbutsu.length; i++){
Jinbutsu[i] = new clsHuman();
}
Jinbutsu[0].strName = "博麗霊夢";
Jinbutsu[0].blnWaki = true;
Jinbutsu[0].intAge = 15;
Jinbutsu[1].strName = "霧雨魔理沙";
Jinbutsu[1].blnWaki = false;
Jinbutsu[1].intAge = 13;
Jinbutsu[2].strName = "八意永琳";
Jinbutsu[2].blnWaki = false;
Jinbutsu[2].intAge = 17;
}