如何使用Java代码生成指定区间的随机整数呢?

书欣 Java经验 发布时间:2023-01-28 09:07:30 阅读数:12932 1
下文笔者讲述生成特定区间的随机整数的方法分享,如下所示
生成随机整数的思路:
    方式1:
	   借助java.util.Random.nextInt方法
	方式2:
	   借助Math.random()随机,然后将其转换为整数
	方式3:
	   借助JDK8中的Random.ints方法生成随机整数
例:

java.util.Random.nextInt

Random().nextInt(int bound)
生成一个从0(含)到bound(Random().nextInt(int bound)的随机整数
 getRandomNumberInRange(6,20)方法
   将生成一个介于6(含)和20(含)之间的随机整数
 
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;
	}


(max – min)+ 1)+ min的作用
使用以上公式将会生成一个在min(含)和max(含)之间生成一个随机整数 

//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]
例:
生成一个8~16之间的随机整数
TestRandom.java
 
package com.java265.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(8, 16));
		}
	}
 
	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;
	} 
}

Math.random数学随机

 Math.random()将生成一个
  从0.0(含)到1.0的随机数

如:
  (int)(Math.random() * ((max - min) + 1)) + min    
例:
生成10个随机整数
取值范围在8(含)和12(含)之间

TestRandom.java

package com.java265.example.test;
 
public class TestRandom {
 
	public static void main(String[] args) {
 
		for (int i = 0; i < 10; i++) {
			System.out.println(getRandomNumberInRange(8,12));
		}
	}
 
	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;
	}
}

Java 8 Random.ints简介

Random.ints方法是Java8中,新增的方法,其源码如下所示:

public IntStream ints(int randomNumberOrigin, int randomNumberBound)
	public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
例:
生成一个在11(含)和18(含)之间的随机数

TestRandom.java

package com.java265.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();	
	}
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202301/16748681055539.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者