スポンサードリンク

【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:プラダ ボストン スーパーコピー 時計:2022/06/24 17:31:44

本日、届きました
ヴィトンのパドロックを買いましたが、凄く丁寧に磨かれており新品品には見えません。梱包も丁寧出しまた機会がありましたらこちらのお店で商品を買いたいと思います
プラダ ボストン スーパーコピー 時計 https://www.007kopi.com/product/3628.html

4:TWCP:2022/09/05 20:56:14

-3170 UNION ALL SELECT CONCAT(CONCAT('qqkjq','ViDvKacPpR'),'qqbjq'),NULL,NULL,NULL,NULL– SGcm

5:スーパーコピー 腕時計 評価:2022/09/28 14:05:28

注文後本当にすぐに届き驚きました。
迅速な対応ありがとうございました。
プレゼントにオススメ♪カードOK 送料無料 未使用コーチ ポーチ ダルシーサフィアーノレザースモールリストレット F52205 レザー レッド 新品・未使用 カーフ 革 皮 赤 ストラップ ロゴ コーチ
ちょうどいい大きさです。
使い勝手がいい大きさです。
これから活躍してくれそうです。
スーパーコピー 腕時計 評価 https://www.kyoku66.com/goods-10013.html

6:vog.agvol.comブランドコピー:2023/03/20 20:17:10

MONCLER半袖Tシャツコピー ブランド 通販 安心,MONCLERコピー 販売,半袖Tシャツコピー 販売vog.agvol.com/goods-125143.html 半袖Tシャツモンクレール手持ち在庫あり海外セレブ愛用オフィスにもブランド スーパー コピー 優良 MONCLERスーパー ブランド コピーvog.agvol.com/brand-39-c0.htmlモンクレールブランド 偽物 激安 通販 ブランド 偽物半袖TシャツMONCLER海外セレブが注目アイテム在庫あり即納

7:ロレックス 修理 大阪市:2024/02/29 11:12:23

2024年人気貴族ブランドコピー(N級品)優良店!
ルイヴィトン、シャネル、グッチ、ロレックス、バレンシアガ、
エルメス)、コーチ、ブラダ、クロエ大激売中
★高級品☆┃時計┃バッグ┃財 布┃その他┃
◆★ 誠実★信用★顧客は至上
●在庫情報随時更新!
品質がよい 価格が低い 実物写真 品質を重視
100%品質保証 100%満足保障 信用第一
★人気最新品┃特恵中┃☆腕時計、バッグ、財布、ベルト、アクセサリー、小物☆
★当店商品送料無料日本全国!
休業日: 365天受付年中無休

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