Javaでランダムな整数を生成する方法

王林
リリース: 2023-05-20 09:28:28
転載
1344 人が閲覧しました

1. java.util.Random

この Random().nextInt(intbound) は、0 (両端を含む) から境界 (両端を含まない) までのランダムな整数を生成します。

(1) コード スニペット

getRandomNumberInRange(5, 10) の場合、5 (両端を含む) から 10 (両端を含む) までのランダムな整数が生成されます。

private static int getRandomNumberInRange(int min, int max) {
		if (min >= max) {
			throw new IllegalArgumentException("max must be greater than min");
		}
		Random r = new Random();
		return r.nextInt((max - min) + 1) + min;
	}
ログイン後にコピー

(2) (max – min) とは 1) min?

上記の式は、 min (両端を含む) と max (両端を含む) の間のランダムな整数を生成します。

//Random().nextInt(int bound) = Random integer from 0 (inclusive) to bound (exclusive)	
	//1. nextInt(range) = nextInt(max - min)
	new Random().nextInt(5);  // [0...4] [min = 0, max = 4]
	new Random().nextInt(6);  // [0...5]
	new Random().nextInt(7);  // [0...6]
	new Random().nextInt(8);  // [0...7]
	new Random().nextInt(9);  // [0...8]
	new Random().nextInt(10); // [0...9]			
	new Random().nextInt(11); // [0...10]	
	//2. To include the last value (max value) = (range + 1)
	new Random().nextInt(5 + 1)  // [0...5] [min = 0, max = 5]
	new Random().nextInt(6 + 1)  // [0...6]
	new Random().nextInt(7 + 1)  // [0...7]
	new Random().nextInt(8 + 1)  // [0...8]
	new Random().nextInt(9 + 1)  // [0...9]
	new Random().nextInt(10 + 1) // [0...10]			
	new Random().nextInt(11 + 1) // [0...11]	
	//3. To define a start value (min value) in a range,
	//   For example, the range should start from 10 = (range + 1) + min
	new Random().nextInt(5 + 1)  + 10 // [0...5]  + 10 = [10...15]
	new Random().nextInt(6 + 1)  + 10 // [0...6]  + 10 = [10...16]
	new Random().nextInt(7 + 1)  + 10 // [0...7]  + 10 = [10...17]
	new Random().nextInt(8 + 1)  + 10 // [0...8]  + 10 = [10...18]
	new Random().nextInt(9 + 1)  + 10 // [0...9]  + 10 = [10...19]
	new Random().nextInt(10 + 1) + 10 // [0...10] + 10 = [10...20]
	new Random().nextInt(11 + 1) + 10 // [0...11] + 10 = [10...21]	
	// Range = (max - min)
	// So, the final formula is ((max - min) + 1) + min	
	//4. Test [10...30]
	// min = 10 , max = 30, range = (max - min)
	new Random().nextInt((max - min) + 1) + min
	new Random().nextInt((30 - 10) + 1) + 10
	new Random().nextInt((20) + 1) + 10
	new Random().nextInt(21) + 10    //[0...20] + 10 = [10...30]	
	//5. Test [15...99]
	// min = 15 , max = 99, range = (max - min)
	new Random().nextInt((max - min) + 1) + min
	new Random().nextInt((99 - 15) + 1) + 15
	new Random().nextInt((84) + 1) + 15
	new Random().nextInt(85) + 15    //[0...84] + 15 = [15...99]	
	//Done, understand?
ログイン後にコピー

(3) 5 (両端を含む) から 10 (両端を含む) までの範囲の 10 個のランダムな整数の完全な例を生成します。

package com.mkyong.example.test;
import java.util.Random;
public class TestRandom {
	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
			System.out.println(getRandomNumberInRange(5, 10));
		}
	}
	private static int getRandomNumberInRange(int min, int max) {
		if (min >= max) {
			throw new IllegalArgumentException("max must be greater than min");
		}
		Random r = new Random();
		return r.nextInt((max - min) + 1) + min;
	}
}
ログイン後にコピー

出力

7
6
10
8
9
5
7
10
8
5

2. Math.Random

この Math.random() は、 0.0 (両端を含む) から 1.0 (両端を含まない) までのランダムな double 値を与えます。

(1) コード スニペット。 1.2 を参照すると、ほぼ同じ式です。

(int)(Math.random() * ((max - min) 1)) min

(2) は 16 (両端を含む) から 20 (両端を含む) を生成します範囲内の 10 個のランダムな整数の完全な例)。

package com.mkyong.example.test;
public class TestRandom {
	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
			System.out.println(getRandomNumberInRange(16, 20));
		}
	}
	private static int getRandomNumberInRange(int min, int max) {
		if (min >= max) {
			throw new IllegalArgumentException("max must be greater than min");
		}
		return (int)(Math.random() * ((max - min) + 1)) + min;
	}
}
ログイン後にコピー

出力

17
16
20
19
20
20
20
17
20
16

3. Java 8 Random.ints

Java 8 では、新しいメソッド java.util.Random

public IntStream ints(int randomNumberOrigin, int randomNumberBound)
	public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
ログイン後にコピー

This Random.ints( int Origin, intbound) または Random.ints(int min, int max) は、原点 (両端を含む) から境界 (両端を含まない) までのランダムな整数を生成します。

(1) コード スニペット。

private static int getRandomNumberInRange(int min, int max) {	
		Random r = new Random();
		return r.ints(min, (max + 1)).findFirst().getAsInt();
	}
ログイン後にコピー

(2) 33 (両端を含む) ~ 38 (両端を含む) の範囲の 10 個のランダムな整数の完全な例を生成します。

package com.mkyong.form.test;
import java.util.Random;
public class TestRandom {
	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
			System.out.println(getRandomNumberInRange(33, 38));
		}
	}
	private static int getRandomNumberInRange(int min, int max) {	
		Random r = new Random();
		return r.ints(min, (max + 1)).limit(1).findFirst().getAsInt();		
	}	
}
ログイン後にコピー

出力

34
35
37
33
38
37
34
35
36
37

(3) ご参考までに、おまけ。

ストリーム サイズ 10 で、33 (両端を含む) ~ 38 (両端を含まない) の範囲のランダムな整数を生成します。 forEach.

//Java 8 only
	new Random().ints(10, 33, 38).forEach(System.out::println);
ログイン後にコピー

34
37
37
34
34
35
36# で出力を出力します。 ##33
37
34

以上がJavaでランダムな整数を生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!