【改訂版】Eclipseではじめるプログラミング
連載インデックスへ
【改訂版】Eclipseではじめるプログラミング(7)

クラスの振る舞いを表すJavaの“メソッド”とは?


株式会社ガリレオ
小山博史
2009/5/21


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回目の実行で確かに結果が変わりました。

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

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

実は「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のプログラムを作成するに当たって、メソッドは重要な文法事項なのでよく理解しておきましょう。

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

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

@IT関連記事


“たい焼き”であま〜く理解するJava文法と言語仕様
携帯アプリを作って学ぶJava文法の基礎(3) 
初心者がJava言語を学ぶうえで最も困難なものの1つ、クラスやインスタンス、メソッドなどの概念をたい焼きで理解しましょう
Java Solution」フォーラム 2008/3/12
メソッドとコンストラクタはなぜ必要?
[連載]いまから始めるJava(5)
 メソッドとコンストラクタによってプログラムを効率的に書けることを確認するとともに、プログラムには制御文が必要であることも理解します

Java Solution」フォーラム 2003/5/8
Objective-Cのクラス定義を理解しよう
Cocoaの素、Objective-Cを知ろう(3)
 メソッドの定義とその呼び出し方法をケースごとに整理する。また、バージョン2.0から導入されたアクセサメソッドの自動生成とは?
Coding Edge」フォーラム 2008/11/10
ActionScriptで学ぶクラスやオブジェクト指向の基礎
Flashの基礎を無料で習得! ActionScript入門(4) 本格的なオブジェクト指向言語となったActionScript 3.0を通じてクラスやフィールド、メソッドなどの基本を学びましょう
リッチクライアント & 帳票」フ ォーラム 2008/4/9
第2章 名前空間とクラス
連載:改訂版 C#入門
 今回は、C#プログラムの全体的な構造を知る。C#では、コードの入れ物として機能する「名前空間」と「クラス」を記述する。まずはこの2つを理解しよう
Insider.NET」フォーラム 2002/8/8
コーディングに役立つ! アルゴリズムの基本
コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう
Coding Edge」フォーラム

筆者プロフィール
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)bugs(J)の活動へも参加している。
著書に「基礎Java」(インプレス)、共著に「Javaコレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。

 

1-2-3
 

 Index
第7回 クラスの振る舞いを表すJavaの“メソッド”とは?
  Page1
「メソッド」はクラスの“振る舞い”を表現する
CDプレーヤーで理解する「メソッド」
Javaにおけるメソッドの書き方の主な4パターン
  Page2
イカサマサイコロを、Javaプログラムで表現すると
もう、サイコロを利用するクラスを書けますよね?
Page3
java.util.Randomでサイコロをイカサマじゃなくする
実は「System.out.println」「main」もメソッドだったんです


【改訂版】Eclipseではじめるプログラミング バックナンバー 連載インデックスへ»




Java Solution全記事一覧



TechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH