
クラスの振る舞いを表す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コレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。 |
| Index | ||||||||
|
||||||||
【改訂版】Eclipseではじめるプログラミング バックナンバー 連載インデックスへ»
- 第1回 Eclipse 3.4で超簡単Javaプログラミング基礎入門
- 第2回 Javaで一から理解するプログラムの変数と演算子
- 第3回 プログラミングの醍醐味! Javaで“条件式”を理解する
- 第4回 プログラミングの真骨頂! Javaで“反復処理”を覚える
- 第5回 データ集合を扱うのに便利なJavaの配列と拡張for文
- 第6回 複雑なデータを表現できるクラスやフィールドって?
- 第7回 クラスの振る舞いを表すJavaの“メソッド”とは?
- 第8回 Javaの参照型を文字列操作で理解して文法を総復習
- 第9回 プログラムを「変更」しやすくする“インターフェイス”
- 第10回 Javaの実案件に必須のパッケージとインポートを知る
- 第11回 「static」でクラス共有の変数・メソッドを使いこなせ!
- 第12回 継承やオーバーライドで簡単にクラスを“拡張”しよう
- 第13回 “コンストラクタ”と初期化、本当に理解できてる?
- 第14回 再利用性の高いクラス作成に重要な“アクセス制御”
- 第15回 Javaは「抽象クラス」で実装を上手に再利用できる
- 第16回 “ネスト”した型で始める軽量Javaプログラミング!?
- 第17回 あなたの知らない、4つのマニアックなJava文法
- 第18回 強く型付けされているJavaの理解に必修の“型変換”
- 第19回 キュー構造をJavaで実装してジェネリック型を理解する
- 第20回 拡張for文の真の実力を知り、反復処理を使いこなせ
- 第21回 7ステップで理解するJavaでの列挙型/enum使用法
- 第22回 いまさら聞けない「Javadoc」と「アノテーション」入門
- 第23回 プログラマの宿命! 例外とエラー処理を理解する
- 第24回 Javaの例外処理で知らないと損する7つのテクニック
| Java Solution全記事一覧 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
