Rumah > Java > javaTutorial > teks badan

Bagaimana untuk menjana integer rawak dalam Java

王林
Lepaskan: 2023-05-20 09:28:28
ke hadapan
1366 orang telah melayarinya

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;
	}
Salin selepas log masuk

(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?
Salin selepas log masuk

(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;
	}
}
Salin selepas log masuk

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;
	}
}
Salin selepas log masuk

Output

17
16
20
19
20
20
20
17<🎜
16

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)
Salin selepas log masuk

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();
	}
Salin selepas log masuk

(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();		
	}	
}
Salin selepas log masuk

Output

34

35
37
33
38
37
34
35<🎜
37

(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);
Salin selepas log masuk

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan