スポンサードリンク

【Java】乱数(ある範囲のランダムの数字)を生成する

Javaである範囲の乱数(ランダムの数字)を生成する方法を説明します。

1.random()メソッドとは?

random()メソッドとは、0.0以上1.0未満の実数を生成するメソッドです。

0.0以上1.0未満の実数を生成

2.乱数の生成

1.基本

では本当に0.0以上1.0未満の乱数が生成するか確認してみましょう。

「Lesson036.java」というファイルを作成し、以下のJavaプログラムを入力・保存してください。

public class Lesson036{
	public static void main(String args[]){
		//randomメソッドは実数を生成するのでdouble型の変数を宣言
		double d;
		//randomメソッドで生成した実数を変数dに代入
		d = Math.random();
		//出力
		System.out.println(d);
	}
}

 

そして以下のように「javac Lesson036.java」でコンパイルし、「java Lesson036」で実行してください。

C:\Users\ysk\Desktop\java>javac Lesson036.java

C:\Users\ysk\Desktop\java>java Lesson036
0.14332340115591036

また、確認のために以下のように何度も実行してみてください。

C:\Users\ysk\Desktop\java>java Lesson036
0.04355496303707351

C:\Users\ysk\Desktop\java>java Lesson036
0.7221267559693679

C:\Users\ysk\Desktop\java>java Lesson036
0.9794569244504536

C:\Users\ysk\Desktop\java>java Lesson036
0.18332496863543613

確かに0.0以上1.0未満の実数が生成されることがわかります。

2.0~9の整数を生成

0~9の整数をランダムに生成するにはどうすればよいでしょうか?

当然random()メソッドを使うのですが、random()メソッドは0.0以上1.0未満の実数しか生成しません。

しかしrandom()メソッドで生成する数字を10倍すればどうなるでしょうか?

Math.random()*10;

こうすることで

0.0以上1.0未満の実数を生成

↓ ×10倍

0.0以上10.0未満の実数を生成

そしてこれをint型にキャスト(明示的な型変換)するとどうなるでしょうか?

int型は整数を扱うデータ型なので、実数部分は切り捨てられます。つまり

(int)(Math.random()*10);

【ポイント】

「Math.random()*10」をint型にキャストするので、「(Math.random()*10)」と括弧でくくらなければなりません。

もし「( )」がない場合は、「Math.random()」だけしかキャストされません。

とすると

0.0以上10.0未満の実数を生成

0から9の整数を生成

することができます。

では確認してみましょう。

「Lesson037.java」というファイルを作成し、以下のJavaプログラムを入力・保存してください。

public class Lesson037{
	public static void main(String args[]){
		//int型変数iを宣言
		int i;
		//randomメソッドで0以上10未満の整数を生成
		i = (int)(Math.random()*10);
		//出力
		System.out.println(i);
	}
}

 

そして以下のようにコンパイル・実行してください。

C:\Users\ysk\Desktop\java>javac Lesson037.java

C:\Users\ysk\Desktop\java>java Lesson037
9

また、以下のように何度も実行してみてください。

C:\Users\ysk\Desktop\java>java Lesson037
8

C:\Users\ysk\Desktop\java>java Lesson037
4

C:\Users\ysk\Desktop\java>java Lesson037
1

C:\Users\ysk\Desktop\java>java Lesson037
6

確かに、0から9の整数がランダムに生成していることがわかります。

3.5~8の整数を生成

5~8という中途半端な範囲の整数を生成するにはどうすればよいでしょうか?

これもrandom()メソッドを利用すれば簡単です。

考え方としては、まず「5~8の整数」をマイナス5して「0~3の整数」を生成することに考えを切り替える。

5~8の整数

↓ マイナス5

0~3の整数

「0~3の整数」を生成するには、「0~4未満の実数」を以下のように作成し、

Math.random()*4;

これをint型にキャストすればよい。

(int)(Math.random()*4);

そして最初にマイナス5したので、調整のためにプラス5してあげる。

(int)(Math.random()*4)+5;

これで5~8の範囲の整数を取得することができます。

確認のため、「Lesson038.java」というファイルを作成し、以下のJavaプログラムを入力・保存してください。

public class Lesson038{
	public static void main(String args[]){
		//int型変数iを宣言
		int i;
		//randomメソッドで5~8の整数を生成
		i = (int)(Math.random()*4)+5;
		//出力
		System.out.println(i);
	}
}

 

そして以下のようにコンパイル・実行してください。

C:\Users\ysk\Desktop\java>javac Lesson038.java

C:\Users\ysk\Desktop\java>java Lesson038
7

以上の要領で工夫すれば、自分が意図する乱数をrandom()メソッドを利用して生成することができます

コメント

1:なお:2016/06/11 14:04:26

-10から10までの乱数の範囲指定をしたいのですが上手くいきません。
(int)(Math.random()*-10)+20;
では、ないのでしょうか?
わかる方が、いれば返信お願いいたします。
よろしくお願い致します。

2:名無しさん:2016/09/16 13:37:10

>>なおさん
何か勘違いしてますね。
-10~10までの範囲は
0~20 – 10
です。

なおさんの書いたものは
0~10 – 20
なので-20~-10の範囲になってしまいます

コメントフォーム
お名前
コメント