クラスの振る舞いを表すJavaの“メソッド”とは?【改訂版】Eclipseではじめるプログラミング(7)(3/3 ページ)

» 2009年05月21日 00時00分 公開
[小山博史株式会社ガリレオ]
前のページへ 1|2|3       

java.util.Randomでサイコロをイカサマじゃなくする

 イカサマサイコロを作成しただけでは満足できない読者のために、ランダムな値を戻すようにDiceクラスを改良する方法についても解説します。

 ランダムな値を生成するクラスとしてJavaではjava.util.Randomクラスが用意されています。このインスタンスを得るために、new演算子を使います。整数のランダムな値を得るためには「nextInt」メソッドを使います。nextIntメソッドを呼ぶと、「0」から「パラメータで指定した値-1」のランダムな値が戻ってくるので、その値へ1を足して戻します。つまり、nextIntメソッドのパラメータとして6を指定すると、0から5(これは6-1の結果)までのランダムな値が戻ります。これを1から6までのランダムな値にして戻せばよいので、1を加算します。

 以上をまとめると、次のようになります。ただし、6がサイコロの目の数の最大値だということが分かるように、「maxNum」というフィールドをint型で宣言して、rのnextIntメソッドへこれを渡しています。こうしておけば、6がどんな意味なのか分かりますし、万が一、気が変わって「この正六面体サイコロを正四面体サイコロにしたい場合は、maxNumの値を6から4へ変更するだけで済む」というメリットがあります。

public class Dice {
java.util.Random r = new java.util.Random();
int maxNum = 6;
public int roll() {
return r.nextInt(maxNum) + 1;
}
}

 イカサマサイコロの実装を書き換えて保存してから、DiceTestを実行してみましょう。このようにすると、毎回実行するたびに結果が変わるはずです。何回か実行して確認しましょう。筆者の環境で実行したところ、次のように1回目の実行、2回目の実行で確かに結果が変わりました。

2
1
4
1
1
2
6
1回目の実行結果
4
3
4
6
3
6
6
2回目の実行結果

実は「System.out.println」「main」もメソッドだったんです

 今回は、「クラスの振る舞い」と「Javaのメソッド」とについて解説をしました。メソッドの基本は理解できたでしょうか。すでにお気付きの読者も多いと思いますが、これまでの連載できちんとした解説をせずに使っていた「System.out.println()」はメソッドです。Sysytem(正確には、java.lang.System)クラスが持つoutフィールドはjava.io.PrintStream型です。java.io.PrintStreamクラスはprintln()メソッドを持っています。このメソッドを呼び出しているのです。

 また、よく使っていた「public static void main(String[] args) { 処理 }」もメソッドです。これは、「Stringの配列をパラメータとして持ち、戻り値がないmainという名のメソッドだ」ということです。このメソッドは特別なもので、JavaのクラスにあるmainメソッドはjavaコマンドJDKに付属するJavaプログラム実行コマンド)で呼び出せます。

 このコマンドを使ったクラスの実行はこれまでしていませんが、実はEclipseではメニューの[実行]→[次を実行]→[Javaアプリケーション]を指定することにより、内部的にjavaコマンドを実行します。ですから、実は知らないうちにこのmainメソッドを使ってクラスの実行をしていたのです。これらのことからも分かるように、Javaのプログラムを作成するに当たって、メソッドは重要な文法事項なのでよく理解しておきましょう。

 さて、これでクラスの基本についての解説はおしまいです。これまでの説明で、プリミティブ型だけでなく、配列やクラスといった型を利用できるようになりました。ただし、プリミティブ型とほかの型(配列やクラス)は使い方がちょっと違いました。実は配列、クラスは「参照型」と呼ばれる型でプリミティブ型とはまったく別物です。そこで、次回は参照型について解説します。

  今回作ったサンプルのソースコードはこちらからダウンロードできます。

筆者紹介

小山博史(こやま ひろし)

情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)bugs(J)の活動へも参加している。

著書に「基礎Java」(インプレス)、共著に「Javaコレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。



「【改訂版】Eclipseではじめるプログラミング」バックナンバー
前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。