配列とは?
ファイルはzipフォルダに納められています。
解凍ソフト(Aladdin Expander等)を使って解凍して下さい。
配列の仕組み
演算してみようで学んだ成績処理プログラムでも「国語」「数学」「英語」と言う同じ性格のデータが並びました。
此の様に、同じ性格のデータを1まとめにして1つの名前を付けた物を配列と言います。
変数を1戸建ての家とすると、配列はマンションの様な物です。
1戸建ての家にはそれぞれ住所(アドレス)が有りますが、マンションは1つの住所に何家族も住んでいます(但し、部屋の数より多い家族は入居させられません)。
全く同様に、1つの変数に1つのデータしか入りませんが、1つの配列には部屋が有る限り、同じ型のデータを幾つも入れられるのです。
其の全体を代表する住所(アドレス)を表す名前を配列名と言います。
int型配列「ten」に3つの部屋が有り、それぞれに1つずつint型のデータが入っています。
マンションでは1つ1つの部屋の住所は、
等の様に部屋番号を付けて表します。
同様に配列の中の1つ1つのデータの所在を表すのには、「[]」で囲まれた「0」から始まる整数を使います。
「ten[0]」は配列「ten」の「0番目」のデータと言う意味です。
配列の1つ1つの部屋 |
配列要素 |
配列要素を区別する様な整数 |
配列の添字 |
配列の利用 配列の宣言 変数と同様に配列を使う時にも予め「此は配列ですよ」と言う宣言をしなければなりません。 配列の宣言では、型名の後に「[]」を書いて此が配列で有る事を宣言します。 又、同時に其の配列には要素が何個有るかを明確にしますが、其れには「new」演算子を使います。
例: |
int[] ten = new int[3]; //「ten」はint型の配列で、新しくint型の領域を3つ確保 | 配列要素への代入 1つ1つの配列要素にデータを格納する時は、添字を使ってどの配列要素にデータを入れたいかを指定します。
配列名と添字都で1つの変数と同じ様に扱えます。 要素を指定する添字の値は「0〜要素数-1」でなければなりません。
例えば下の例では配列「ten」には3つの要素が有る為、添字として有効なのは「0〜2」です。
例: |
ten[0] = 85; //0番目にデータを代入 | 文字列を扱うStringクラス char型が記憶出来るのは、半角、全角を問わずたったの1文字でした。 しかし文字は、幾つも集まってこそ意味の有る単語や文章になる為、沢山の文字を文字列と言い、文字列を扱うのがStringクラスです。 文字は「'」で囲んで表しましたが、文字列は「"」で囲んで表します。 画面に表示する文字は、
g.drawString("私のハンドル・ネームは溝ノ口です",
20, 60); | の様に「"」で囲みましたが、実は此は文字列だったのです。
又、フォント名も「"MS 明朝"」の様に「"」で囲んでありますが、此も文字列です。 此等にオブジェクト名は付いていませんが、データを記憶する為には、オブジェクトのメモリ領域は必ず必要で、其の為名前の無いオブジェクトが其処には存在しているのです。
Stringクラスのオブジェクトの初期化には、2つの方法が有ります。
1つはインスタンス化による初期化で、もう1つは代入による初期化です。
例: |
インスタンス化による初期化 |
String s = new String("私のハンドル・ネームは溝ノ口です"); 新しく領域が確保され、文字列データは新しい領域にコピー |
代入による初期化 |
String s = "私のハンドル・ネームは溝ノ口です"; オブジェクト名「s」は、名前無しのオブジェクトの領域を指す | オブジェクトの初期化 オブジェクト名は、宣言と同時に初期化出来ます。 又、新たにメモリ領域を確保するインスタンス化も出来ます。
オブジェクトは第4章でしっかり学びますが、此処では「こんな物かな?」と言うイメージだけつかんで措きましょう。
例: |
Color color1 = Color.green; //緑で初期化 |
Color color2 = new Color(0, 180, 255); //インスタンス化 | 配列の初期化 配列を宣言する時、同時に最初のデータを与えられます。 配列の初期化は配列要素数のデータを「,」で区切って並べ、「|」と「|」で囲って書きます。
其の為、沢山の配列要素を1度に初期化出来ます。
例: |
int[] ten = {85, 70, 88}; //int型配列「ten」の初期化 | 添字を変数で表す SeisekiArrayCui.javaの20〜27行目に注目してみましょう。 プログラムは原則として、上から順に進んで行く為、変数「i」の内容は段々変化して行きます。 配列「ten」の添字と変数「i」の内容の関係を調べてみましょう。
20行目 |
i = 0; |
22行目 |
total += ten[0];・・・「i」と同じなので「i」にしても良い |
23行目 |
i++; |
24行目 |
total += ten[1];・・・「i」と同じなので「i」にしても良い |
25行目 |
i++; |
26行目 |
total += ten[2];・・・「i」と同じなので「i」にしても良い |
27行目 |
i++; | 配列「ten」の添字と変数「i」の値は、全て同じで有る事が解ります。 其の為、添字の代わりに変数「i」と書いても良いのです。
20行目 |
i = 0; |
22行目 |
total += ten[i]; |
23行目 |
i++; |
24行目 |
total += ten[i]; |
25行目 |
i++; |
26行目 |
total += ten[i]; |
27行目 |
i++; | 2行を1セットにした、全く同じ式が3つ並びました。
「全く同じで有る」事が、此から第3章に進んで行く上でとても重要になります。 オブジェクト配列 同じクラスのオブジェクトが沢山有る時、此を配列に出来ます。 型の変わりにクラスになっただけで、後は普通の配列と同じです。
例: |
Color[] c = new Color[4];
//「c」はColorクラスの配列で、新しくColorクラスのオブジェクト名(小さい領域)を4つ登録 (此だけではインスタンス化されていない) | 配列要素の1つ1つについてインスタンス化や代入により、オブジェクトを用意します。 データの分離 1本の線を描く為には、始点の「x座標」「y座標」、終点の「x座標」「y座標」と言う4つのデータが必要です。 此の例では10本の直線を描く式の形を揃える為、配列を利用します。 配列要素数の取得 配列要素数が幾つ有るのかを調べるには、以下の様に書きます。
例: |
int n = x1.length; //配列「x1」の要素数を変数「n」に求める | 戻る |