Rumah >Java >javaTutorial >Bagaimana untuk menjana integer rawak dalam Java

Bagaimana untuk menjana integer rawak dalam Java

王林
王林ke hadapan
2023-05-20 09:28:281444semak imbas

1. java.util.Random

Random().nextInt(int bound) akan menjana integer rawak daripada 0 (inklusif) kepada terikat (eksklusif).

(1) Coretan kod

Untuk getRandomNumberInRange(5, 10), ini akan menjana integer rawak antara 5 (inklusif) dan 10 (inklusif).

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) Apakah (maks – min) + 1) + min?

Formula di atas akan menjana antara min (inklusif) dan maks (inklusif) integer rawak.

//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) Hasilkan contoh lengkap 10 integer rawak dalam julat antara 5 (inklusif) dan 10 (inklusif).

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;
	}
}

Output

7
6
10
8
9
5
7
10
8
5

2. Math.Random

Math.random() ini memberikan nilai berganda rawak daripada 0.0 (inklusif) kepada 1.0 (eksklusif) .

(1) Coretan kod. Merujuk kepada 1.2, formulanya lebih kurang sama.

(int)(Math.random() * ((maks - min) + 1)) + min

(2) menjana 16 (termasuk) hingga 20 Contoh lengkap 10 integer rawak dalam julat (termasuk).

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;
	}
}

Output

17
16
20
19
20
20
20
1716

3. Java 8 Random.ints

Dalam Java 8, kaedah baharu java.util.Random telah ditambahkan

public IntStream ints(int randomNumberOrigin, int randomNumberBound)
	public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)

Random ini. ints(int origin, int bound) atau Random.ints(int min, int max) menjana integer rawak daripada asal (inklusif) kepada terikat (eksklusif).

(1) Coretan kod.

private static int getRandomNumberInRange(int min, int max) {	
		Random r = new Random();
		return r.ints(min, (max + 1)).findFirst().getAsInt();
	}

(2) Menghasilkan contoh lengkap 10 integer rawak dalam julat 33 (inklusif) hingga 38 (inklusif).

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();		
	}	
}

Output

34

35
37
33
38
37
34
3537

(3) Tambahan untuk rujukan anda sendiri.

Jana integer rawak dalam julat 33 (termasuk) dan 38 (eksklusif) dengan saiz strim 10. dan cetak keluaran dengan forEach.

//Java 8 only
	new Random().ints(10, 33, 38).forEach(System.out::println);

34
37

37
34
34
35
36
33
37
34

Atas ialah kandungan terperinci Bagaimana untuk menjana integer rawak dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam