人気ブログランキング | 話題のタグを見る

[JAVA]JAVAで構造体配列を扱う方法

 「JAVAには(VBやCのような)構造体が無い」という衝撃の事実にハマった。
正確には「無い」のではなく、クラスを宣言して代用するらしい。
細かい文法は抜きにして「考え方」を忘れないようにメモっておく。


class clsHuman {
String strName = "";
int intAge = 0;
boolean blnWaki = false;
}

↑グローバルなところにクラスを宣言する。これは他言語と同じ感覚だね。
サンプルとして人物のデータ(名前、年齢、脇の有無)を取得するためのクラスを宣言。

で、実際に関数内で構造体(のようなもの)を使用するときは以下のように宣言する。

void main(){
clsHuman Reinmu = new clsHuman();

Reinmu.strName = "博麗霊夢";
Reinmu.blnWaki = true;
Reinmu.intAge = 15;
}

「Reimu」は構造体変数。この使い方も多言語と同じ感覚で。


 さて、実際にプログラムを組むならば「複数人のデータを1つにまとめて管理したい!」という欲望が出てくる。ArrayList関数に納めるという手もありますが、配列で管理したほうがわかりやすい場合もある。
そんなわけで構造体を配列化したサンプルがこちら↓

void main(){
clsHuman[] Jinbutsu = new clsHuman[3]; //とりあえず3人分

Jinbutsu[0].strName = "博麗霊夢";
Jinbutsu[0].blnWaki = true;
Jinbutsu[0].intAge = 15;
}

はい、これアウトです(ウソだと言ってよ(ry)
「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;

}

別なバグが含まれてるけど気にするな…orz
by nana75 | 2009-11-05 00:01 | OTAKU

暗黒都市Swendieに負けそうな日々の記録をつれづれと…アニメとイーグルスに逃避してorz


by なすのはやて