Java生成范圍內(nèi)隨機(jī)整數(shù)的三種方法
前言
在本文中,我們將向您展示三種生成范圍內(nèi)隨機(jī)整數(shù)的方法。
- java.util.Random.nextInt
- 數(shù)學(xué)隨機(jī)
- java.util.Random.ints(Java 8)
1. java.util.Random
此Random().nextInt(int bound)生成一個(gè)從0(含)到bound( Random().nextInt(int bound)的隨機(jī)整數(shù)。
1.1代碼段。 對于getRandomNumberInRange(5, 10) ,這將生成一個(gè)介于5(含)和10(含)之間的隨機(jī)整數(shù)。
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; }
1.2什么是(max – min)+ 1)+ min?
上面的公式將在min(含)和max(含)之間生成一個(gè)隨機(jī)整數(shù)。
//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?
1.3完整示例生成10個(gè)隨機(jī)整數(shù),范圍在5(含)和10(含)之間。
TestRandom.java
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.數(shù)學(xué)隨機(jī)
此Math.random()給出從0.0(含)到1.0( Math.random()的隨機(jī)雙Math.random() 。
2.1代碼段。 參考1.2,或多或少是相同的公式。
(int)(Math.random() * ((max - min) + 1)) + min
2.2完整示例生成10個(gè)隨機(jī)整數(shù),范圍在16(含)和20(含)之間。
TestRandom.java 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
注意
請閱讀Oracle論壇帖子 , Random.nextInt(n)比Math.random() * n更有效。
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)
此Random.ints(int origin, int bound)或Random.ints(int min, int max)生成一個(gè)從原點(diǎn)(包含)到bound(不包含)的隨機(jī)整數(shù)。
3.1代碼段。
private static int getRandomNumberInRange(int min, int max) { Random r = new Random(); return r.ints(min, (max + 1)).findFirst().getAsInt(); }
3.2完整示例生成10個(gè)隨機(jī)整數(shù),范圍在33(含)和38(含)之間。
TestRandom.java 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.3額外內(nèi)容,僅供參考。
生成介于33(含)和38(不含)之間的隨機(jī)整數(shù),流大小為10。并使用forEach打印出項(xiàng)目。
//Java 8 only new Random().ints(10, 33, 38).forEach(System.out::println);
輸出。
34
37
37
34
34
35
36
33
37
34
參考文獻(xiàn)
- java.util.Random JavaDoc
- java.lang.Math JavaDoc
- Oracle論壇:隨機(jī)數(shù)生成
- 在JavaScript中生成加權(quán)隨機(jī)數(shù)
翻譯自: https://mkyong.com/java/java-generate-random-integers-in-a-range/
總結(jié)
到此這篇關(guān)于Java生成范圍內(nèi)隨機(jī)整數(shù)的三種方法的文章就介紹到這了,更多相關(guān)Java生成隨機(jī)整數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA使用Mybatis插件 MyBatisCodeHelper-Pro的圖文教程
這篇文章主要介紹了IDEA使用Mybatis插件 MyBatisCodeHelper-Pro的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Spring Boot 驗(yàn)證碼框架 CAPTCHA詳解
這篇文章主要介紹了Spring Boot 驗(yàn)證碼框架 CAPTCHA詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Spring入門配置和DL依賴注入實(shí)現(xiàn)圖解
這篇文章主要介紹了Spring入門配置和DL依賴注入實(shí)現(xiàn)圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10以實(shí)例講解Objective-C中的KVO與KVC機(jī)制
這篇文章主要介紹了以實(shí)例講解Objective-C中的KVO與KVC機(jī)制,即Key-Value-Observing與Key-Value-Coding,需要的朋友可以參考下2015-09-09Java中Mybatis,SpringMVC,Spring的介紹及聯(lián)系
這篇文章主要為大家詳細(xì)介紹了Java中Mybatis,SpringMVC,Spring的介紹及聯(lián)系,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10Java Scala實(shí)現(xiàn)數(shù)據(jù)庫增刪查改操作詳解
這篇文章主要介紹了Java Scala實(shí)現(xiàn)數(shù)據(jù)庫增刪查改操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-04-04