スポンサードリンク

【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の範囲になってしまいます

3:スーパーコピー ゼニス:2018/09/20 22:13:12

ブランドコピーならにお任せ!
弊店のロレックススーパーコピーは2年無料保証になります。
ご入金が確認できてから1週間でお届け致します。
ロレックスコピー時計などを購入したい方はこちらへ。
ロレックススーパーコピー時計通販、N級品、全て新品、高い品質、激安、送料無料。

4:バッグ,財布&小物専門店,:2018/10/29 18:29:21

ブランドスーパーコピー靴
2018年人気新素材入荷ブランドスーパーコピー靴、シューズコピー専門サイト問屋

●品質を重視、納期も厳守、信用第一は当社の方針です。
●在庫情報随時更新!

弊社長年の豊富な経験と実績があり。
輸入手続も一切は弊社におまかせてください。
質が一番、最も合理的な価格の商品をお届けいたします。

5:u:2019/10/09 19:11:09

L'année dernière, Garcia a terminé deuxième à l'Omnium britannique.
u http://www.webinterfaces.eu/en39.asp

6:スーパーコピー エビス 500:2019/10/19 5:39:21

写真どおりきれいな商品を購入できました。
梱包も丁寧で、発送も早かったです。
手書きのメッセージも嬉しかったです。
スーパーコピー エビス 500 https://www.copysale.net/Copy-sale-1113-PRADA-_25E3_2583_2597_25E3_2583_25A9_25E3_2583_2580-_25E6_25BF_2580_25E5_25AE_2589-_206C2F6FC6E.htm

7:スーパーコピー 激安 クロムハーツ tシャツ:2020/12/11 17:36:19

迅速な対応
ありがとうございました。
初めての利用、
写真通りのお品でした。
手書きのお手紙
本物証明書
とーっても丁寧な梱包…
信頼できるお店だと思います。
スーパーコピー 激安 クロムハーツ tシャツ https://www.sakurago.net/product/detail-4272.html

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