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)生成一個從0(含)到bound( Random().nextInt(int bound)的隨機(jī)整數(shù)。
1.1代碼段。 對于getRandomNumberInRange(5, 10) ,這將生成一個介于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(含)之間生成一個隨機(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個隨機(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個隨機(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)生成一個從原點(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個隨機(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í)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09Spring Boot 驗(yàn)證碼框架 CAPTCHA詳解
這篇文章主要介紹了Spring Boot 驗(yàn)證碼框架 CAPTCHA詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03Spring入門配置和DL依賴注入實(shí)現(xiàn)圖解
這篇文章主要介紹了Spring入門配置和DL依賴注入實(shí)現(xiàn)圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下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)系,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10Java Scala實(shí)現(xiàn)數(shù)據(jù)庫增刪查改操作詳解
這篇文章主要介紹了Java Scala實(shí)現(xiàn)數(shù)據(jù)庫增刪查改操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-04-04