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
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
3. Java 8 Random.intsDalam Java 8, kaedah baharu java.util.Random telah ditambahkan17
16
20
19
20
20
20
17<🎜
16
public IntStream ints(int randomNumberOrigin, int randomNumberBound) public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
private static int getRandomNumberInRange(int min, int max) { Random r = new Random(); return r.ints(min, (max + 1)).findFirst().getAsInt(); }
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(); } }
3435
(3) Tambahan untuk rujukan anda sendiri.
37
33
38
37
34
35<🎜
37
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);
3737
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!