ここまで 20本程度のプログラムを製作してきましたが、いずれのプログラムもいつ実行しても結果は同じす。プログラムとは基本的にはそういうものではあるのですが、この先のいくつかのプログラムでは乱数(ランダム値)を扱うことにします。そこで、ここで少し乱数について書いてみようと思います。
乱数は、Math.random
メソッドを使って取得することができます。使用方法は以下の通りで、この場合、変数 aには 0以上 1未満の実数(つまり、0~0.9999…の実数)が格納されます。
double a = Math.random();
これを以下のように 6倍すると、0以上 6未満の実数(つまり、0~5.9999…の実数)が格納されることになります。
double a = Math.random() * 6.0;
また、int型にキャストすると、小数点数が取り除かれるので、0~5のいずれかが格納されるということなります。なお、double→intへのキャストは、小さな型への変換なので、全体をカッコでくくり、その先頭にキャスト表現をつけます。
int a = (int)(Math.random() * 6.0);
Math.random
メソッドを使ったサンプルプログラムは以下の通り。
D301/D301.java
/** * 乱数を確認します。 */ public class D301 { /** * メインメソッド。 * @param args 引数 */ public static void main(String[] args) { double a = Math.random(); System.out.println("変数 aの値は " + a); int b = (int)(Math.random() * 100.0); System.out.println("変数 bの値は " + b); } }
実行結果は以下の通り(乱数を使用しているため実行結果は都度変わります)。
変数 aの値は 0.4422814337391533 変数 bの値は 14
変数 aは 0~0.9999…の範囲で値が変動します。また、変数 bは 0~99の範囲で値が変動します。
このウェブサイトでは、3つの自作ライブラリ MySystem、MyCanvas、AsyncPointを使用して解説を進めます。特に MySystemについては、この先の章で、頻繁に利用することになります。あらかじめダウンロードしておいてください。
MySystemライブラリ、MyCanvasライブラリ、AsyncPointライブラリはそれぞれ以下からダウンロード可能です。
ダウンロードした zip形式のファイルを解凍すると、それぞれ MySystem.java、MyCanvas.java、AsyncPoint.javaが現れます。これらのファイルを必要に応じて利用します。
eclipse上の特定のプロジェクトで利用するためには、まず画面左側の Package Explorer から作成したプロジェクトの srcディレクトリの表示させます。以下の例では新規作成したプロジェクト「D302」の srcディレクトリを表示しています。
今回は MySystemを利用しようということで、パソコンの MySystem.java アイコンをドラッグし、srcディレクトリのところでドロップします。すると、以下のウインドウが表示されます。
ラジオボタンが「Copy files」になっていることを確認して「OK」ボタンを押します。すると、MySystem.javaが今回のプロジェクト「D302」に取り込まれます。確認すると以下のようになっています。
続いて、MySystem、MyCanvas、AsyncPointそれぞれの概要を解説し、動作検証用のサンプルプログラムを載せます。
せっかくプログラムを作るのだから、人間からのキーボード入力を受け付けて、それに応じて反応するようなプログラムを作りたいものです。ただ、Javaではキーボード入力を扱うためにはいろいろな問題が絡んでソースコードがとても複雑になります。MySystemライブラリを使用すれば、とても簡単にキーボードからの入力を受け付けることができるようになります。
ダウンロードは、MySystemライブラリ(zip形式)。サンプルプログラムは以下の通り。
D302/MySystem.java
(ライブラリをそのまま利用します)
D302/D302.java
/** * MySystemライブラリをテストします。 */ public class D302 { /** * メインメソッド。 * @param args 引数 */ public static void main(String[] args) { int a, b; System.out.println("2つの整数の合計を表示するプログラムです"); a = MySystem.in.getInt("1つめの数を入力してください"); b = MySystem.in.getInt("2つめの数を入力してください"); int c = a + b; System.out.println("合計は " + c + "です"); } }
実行結果は以下の通り。なお、キーボードから 35および 25という数字を入力しています。
2つの整数の合計を表示するプログラムです 1つめの数を入力してください? 35 2つめの数を入力してください? 25 合計は 60です
MySystemライブラリには、getInt
以外にも幾つかのメソッドを用意していますが、本ウェブサイトの中ではgetInt
以外はしません。今は MySystem.javaの中身のソースコードはさっぱり理解できなくて構いません。Java言語の理解が進めば、どのように利用するかについては分かるようになると思います。Java言語の理解がさらに進めば、このライブラリの全貌が分かるようになると思います。
MyCanvasライブラリは、テキスト文字列を使ったグラフィックスを実現するためのライブラリです。座標を指定して点や直線、四角形を描いたり、指定した文字で塗り潰すことができます。そして、print
メソッドを実行することで画面に表示します。ずっと後の章で再帰関数を紹介する際に、この自作ライブラリのソースコードの一部をさらっと見ることになります。
ダウンロードは、MyCanvasライブラリ(zip形式)。サンプルプログラムは以下の通り。
D303/MyCanvas.java
(ライブラリをそのまま利用します)
D303/D303.java
/** * MyCanvasライブラリをテストします。 */ public class D303 { /** * メインメソッド。 * @param args 引数 */ public static void main(String[] args) { MyCanvas.c.drawPoint(5, 2, 'a'); MyCanvas.c.drawLine(1, 1, 10, 10, 'b'); MyCanvas.c.drawLine(-10, 15, 25, 0, 'c'); MyCanvas.c.fill(15, 15, '+'); MyCanvas.c.drawRect(10, 10, 15, 13, 'd'); MyCanvas.c.drawRectFill(1, 15, 8, 18, 'e'); // 画面に表示する MyCanvas.c.print(); } }
実行結果は以下の通り。
.................... .b.................. ..b..a............cc ...b...........ccc++ ....b........ccc++++ .....b.....cc+++++++ ......b..cc+++++++++ ......ccc+++++++++++ ....cc++b+++++++++++ ..cc+++++b++++++++++ cc++++++++dddddd++++ c+++++++++d++++d++++ ++++++++++d++++d++++ ++++++++++dddddd++++ ++++++++++++++++++++ +eeeeeeee+++++++++++ +eeeeeeee+++++++++++ +eeeeeeee+++++++++++ +eeeeeeee+++++++++++ ++++++++++++++++++++
今はソースコードの意味が分からなくて構いません。もう少し学習を進めた後、このページを振り返ってみたときには、利用法については分かると思います。また、MyCanvasの中身のソースコードはさっぱり理解できなくて構いません。Java言語の理解が進めば、このライブラリの全貌が分かるようになると思います。また、ここには紹介されていない幾つかのメソッドについても気づくことになると思います。
AsyncPointライブラリは、非同期メソッドを理解するためのライブラリです。非同期なメソッドであるtranslate
メソッドを持っています。詳細については、ずっと後の章「スレッド」にて解説します。
ダウンロードは、AsyncPointライブラリ(zip形式)。サンプルプログラムは以下の通り。
D304/AsyncPoint.java
(ライブラリをそのまま利用します)
D304/D304.java
/** * AsyncPointライブラリをテストします。 */ public class D304 { /** * メインメソッド。 * @param args 引数 */ public static void main(String[] args) { AsyncPoint point = new AsyncPoint(10, 20); // 移動させる(このメソッドは非同期メソッド) point.translate(50, 100); System.out.println("変数 pointの参照先インスタンスの内容は " + point); } }
実行結果の例は以下の通り。
変数 pointの参照先インスタンスの内容は MyPoint(60,120)
なお、実行結果は上記とは異なる結果となる可能性があります。
今はソースコードの意味が分からなくて構いません。