【改訂版】Eclipseではじめるプログラミング New!
これからプログラミングを学習したい方、Javaは難しそうでとっつきづらいという方のためのJavaプログラミング超入門連載です。最新のEclipse 3.4とJava 6を使い大幅に情報量を増やした、本連載「Eclipseではじめるプログラミング」の改訂版となります
最近、携帯電話は生活するのに必須だと考える人が増えてきていますが、携帯電話はある意味では携帯コンピュータともいえます。コンピュータだけあって、氏名と電話番号の一覧を表示するアドレス機能などは付いているのは当たり前になっています。こういったアドレス機能のように、あるデータを一覧で表示するためのプログラムを作成するには、値の集合をプログラムで表現できなければいけません。Javaでは値の集合を表す1つの方法として配列を使うことができます。今回はこの配列について解説をします。
配列変数
アドレス機能のプログラムをそのまま作るのはちょっと大変なので、ここでは生年月日の一覧を表示する機能に絞って、プログラムを作ってみましょう。最初に、これまでの知識を使ってプログラムを作成することを考えてみると、生年月日を保持する変数を宣言し、初期化して、一覧表示するということになります。これまで解説したことを思い出せば、long型の変数を必要な数だけ宣言し、値を画面へ出力するにはSystem.out.printlnを使えばよいことは分かるはずです。ただし、生年月日はYYYYMMDDの書式で表される数値とします。また、変数の値が0のときは、「登録されていない」状態であると決めて、出力しないようにします。
取りあえず、プログラムを作成して動作させてみましょう。第2回の「Eclipseの基本操作に慣れる」と同様にEclipseを起動し、パースペクティブを[Java]に切り替えておいてください。パースペクティブが[Java]になっていないときは、メニューの[ウィンドウ]→[パースペクティブを開く]→[Java]を指定すれば、切り替えることができます。今回は次のような手順で新規にクラスを作成することにします。
- [パッケージ・エクスプローラー]の[Sample]をマウス右ボタンでクリック
- 表示されるポップアップメニューで[新規]→[クラス]を指定
- 表示される[新規Javaクラス]ダイアログで、[名前]にSample60と入力
- 同じ[新規Javaクラス]ダイアログで、[どのメソッド・スタブを作成しますか?]のところにある[public static void main(String[] args)]をチェック
- [終了]ボタンをクリック
出来上がったSample60クラスにリスト1の水色部分を追加してください。
リスト1のプログラムを実行すると、生年月日の一覧が画面へ出力されて、画面1のようになります。
19700820
19730703
19750212
19790118
19721209
一覧表示は一応できましたが、これでは、アドレス一覧へ登録可能な数だけ変数を宣言しないといけないので大変です。ここで例に出した生年月日のように、どれも同じデータ型で変数を宣言して、同じような処理を適用したいことはよくあります。このような場合に利用できるデータ型として配列というものがJavaにはあります。
配列を使うと、「順序付けされた要素の集合」を提供することができるようになります。また、簡単に使えるように文法が用意されているので、集合を表現するのに一番気軽に使えるデータ構造です。配列を使うためには、まず配列を宣言しないといけません。配列を宣言するときには、配列の要素の型を指定します。なお、このように宣言された変数を配列変数といいます。
long[] bd;
配列の宣言では、配列の型と名前を決めたことにしかならないので、「要素を入れることができる入れ物」を作成しないといけません。これは以前解説したプリミティブ型とはまったく違うので、注意してください。プリミティブ型では、型と名前を宣言すると同時に入れ物も作成されました。
入れ物を作る命令としてはnew演算子というものがあり、これを使います。「入れ物へ入れることができる要素の数」は、配列の長さとして、配列を作成するときに指定します。次の例では、「10個のlong型の要素を持つことができる入れ物」を作成しています。new演算子の評価結果は、「作成された入れ物への参照値」になります。
new long[10];
コラム 配列の長さ
配列を作成した後で、配列の長さを変更することはできません。このため、普通は必要な長さが分かっている状態で配列を作成します。しかし、必要な長さがどれくらいかはっきりしない場合もあります。その場合は、要素の数をある程度想像して十分大きな配列を用意するか、Javaで用意されている集合を表現できる便利なクラスを利用するかのどちらかになります。後者については、クラスを理解していないと分かりにくいので本連載では紹介しませんが、興味のある読者はjava.util.Collectionについて調べてみるとよいでしょう。
作成した入れ物と、配列変数を結び付けるためには代入演算子を使います。この入れ物を代入できる配列変数は型が一致していないといけないので、longの配列型として宣言されていないといけません。次の例では、longの配列(long[])という型で宣言された変数bdへ、「10個のlong型の要素を持つことができる入れ物」への参照値を代入しています。
bd = new long[10];
このようにして作成した配列内の配列要素を設定したり、参照したりするには、その位置を指定します。位置はインデックス値によって指定できます。これは0から始まり、配列の長さをlengthとすると、最終要素のインデックスはlength-1となります。インデックスはブラケット“[]”の中に書きます。なお、配列の長さは「配列変数名.length」とすることで参照することができます。例えば、配列bdの2番目の要素へ値を設定し、この値と配列の長さを画面へ出力するには、次のようにします。2番目の要素を指定するためには、インデックス値は2-1、つまり1であることに注意してください。
bd[1] = 12;
System.out.println(bd[1]);
System.out.println(bd.length);
インデックスとして指定できる式はint型でなければなりません。これにより、配列の最大長は制限されています。
コラム 空(empty)配列
ただし、長さが0の配列を作ることはでき、これを空(empty)配列といいます。次のように、配列を作成するときに長さを0と指定すれば、空配列になります。
bd = new long[0];
配列を参照する
それでは、配列を使ってリスト1を単純に書き直してみましょう。配列を参照して、その値を出力するプログラムを作成します。ただし、リスト1を直接修正するのではなく、新しくクラスを作成しましょう。
- [パッケージ・エクスプローラー]の[Sample]をマウス右ボタンでクリック
- 表示されるポップアップメニューで[新規]→[クラス]を指定
- 表示される[新規Javaクラス]ダイアログで、[名前]にSample61と入力
- 同じ[新規Javaクラス]ダイアログで、[どのメソッド・スタブを作成しますか?]のところにある[public static void main(String[] args)]をチェック
- [終了]ボタンをクリック
出来上がったSample61クラスにリスト2の水色部分を追加してください。
リスト2のプログラムを実行すると、生年月日の一覧が画面へ出力されて、画面2のようになります。画面1とまったく同じ出力がされることが分かるはずです。
19700820
19730703
19750212
19790118
19721209
配列を反復処理で参照する
リスト2を見て、配列はとても便利だと思った読者はいないと思います。配列はどうやって使うと便利なのかを考えてみましょう。ここで、「インデックスとして指定できる式はint型」ということを思い出すともっとうまい書き方があるのに気付きます。そうです、繰り返し文が使えるのです。繰り返し文を使ってリスト2を書き直してみましょう。なお、配列変数も宣言と同時に初期化ができるので、それも考慮します。これも、リスト2を直接修正するのではなく、新しくクラスを作成しましょう。
- [パッケージ・エクスプローラー]の[Sample]をマウス右ボタンでクリック
- 表示されるポップアップメニューで[新規]→[クラス]を指定
- 表示される[新規Javaクラス]ダイアログで、[名前]にSample62と入力
- 同じ[新規Javaクラス]ダイアログで、[どのメソッド・スタブを作成しますか?]のところにある[public static void main(String[] args)]をチェック
- [終了]ボタンをクリック
出来上がったSample62クラスにリスト3の水色部分を追加してください。
リスト3を見て分かるように、配列を使ったfor文の基本は、カウンタ(ここではi)を0から開始して、配列の長さ(ここではbd.length)未満の間、反復処理をするようにします。
リスト3のプログラムを実行すると、生年月日の一覧が画面へ出力されます。画面2とまったく同じ出力がされるはずなので、結果は省略します。
このように配列を使うと、かなりすっきりするのが分かるはずです。データの一覧表示をする処理の部分は変更しなくても、扱うデータの量に応じて配列の長さを設定して配列を作成すれば、そのまま動作します。どうでしょう、配列の有効性が分かってきたと思います。
Copyright © ITmedia, Inc. All Rights Reserved.