次に前ページで作成したサイコロプログラム(Dice)を利用するクラスを作成します。ここでは動作確認用のクラスということで、DiceTestクラスを作成します。Diceクラスと同じようにEclipseで作成すれば良いのですが、3、4番目の手順(太字の部分)だけは以下のように置き換えてください。
DiceTestクラスが作成できたら、動作確認のためにサイコロを連続7回で振るという処理を実行します。そのために、サイコロのインスタンスをnew演算子で作成して、そのインスタンスのrollメソッドを7回呼んで戻ってきた値をそのままSystem.out.printlnでコンソール画面へ出力するプログラムにしました。参考までに表示される値を各行にコメントとして併記しました。
イカサマサイコロなので何度実行しても結果は同じで、「4 2 1 5 6 3 4」という値が順に出力されます。
4
2
1
5
6
3
4
イカサマサイコロを作成しただけでは満足できない読者のために、ランダムな値を戻すようにDiceクラスを改良する方法についても解説します。ランダムな値を生成するクラスとしてJavaではjava.util.Randomが用意されています。このインスタンスを得るためにnew演算子を使います。整数のランダムな値を得るためにはnextIntメソッドを使います。nextIntメソッドを呼ぶと、0から(パラメータで指定した値-1)のランダムな値が戻ってくるので、その値へ1を足して戻します。つまり、nextIntメソッドのパラメータとして6を指定すると、0から5(これは6-1の結果)までのランダムな値が戻ります。これを1から6までのランダムな値にして戻せばよいので1を加算します。以上をまとめると次のようになります。
イカサマサイコロの実装を書き換えて保存してから、DiceTestを実行してみましょう。このようにすると毎回実行するたびに結果が変わるはずです。何回か実行して確認しましょう。
今回は、「クラスの振る舞い」と「Javaのメソッド」とについて解説をしました。メソッドの基本は理解できたでしょうか。すでにお気付きの読者も多いと思いますが、いままできちんとした解説をせずに使っていたSystem.out.printlnもメソッドです。Systemクラスが持つoutフィールドはjava.io.PrintStream型です。java.io.PrintStreamクラスはprintlnメソッドを持っています。このメソッドを呼び出しているのです。
また、よく使っていた、
public static void main(String[] args) { 処理 }
も太字の部分を見れば分かるようにメソッドです。これはつまり、Stringの配列をパラメータとして持ち、戻り値がないmainという名のメソッドだということです。このメソッドは特別なもので、Javaのクラスにあるmainメソッドはjavaコマンド(Java2 SE SDKに付属するJavaプログラム実行コマンド)で呼び出すことができます。このコマンドを使ったクラスの実行はこれまでしていませんが、実はEclipseではメニューの[実行]−[次を実行]−[Javaアプリケーション]を指定することにより内部的にこのコマンドを実行します。ですから実は知らないうちにこのmainメソッドを使ってクラスの実行をしていたのです。これらのことからも分かるように、Javaのプログラムを作成するに当たってメソッドは重要な文法事項なのでよく理解しておきましょう。
さて、これでクラスの基本についての解説はおしまいです。これまでの説明で、プリミティブ型だけでなく、配列、クラスといった型を利用できるようになりました。ただし、プリミティブ型とほかの型(配列、クラス)は使い方がちょっと違いました。実は配列、クラスは参照型と呼ばれる型でプリミティブ型とはまったく別物です。そこで、次回は参照型について解説をする予定です。
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。Ja-Jakartaプロジェクト(http://www.jajakarta.org/)へ参加し、PMCの一員として活動を支えている。また、長野県の地域コミュニティである、SSS(G)(http://www.sssg.org/)やbugs(J)(http://www.bugs.jp/)の活動へも参加している。
Copyright © ITmedia, Inc. All Rights Reserved.