生成指定范围内的随机数
这个是最常用的技术之一。程序员希望通过随机数的方式来处理众多的业务逻辑,测试过程中也希望通过随机数的方式生成包含大量数字的测试用例。问题往往类似于:
如何随机生成 1~100 之间的随机数,取值包含边界值 1 和 100。
或者是:
如何随机生成随机的3位整数?
等等……
以 Java 语言为例,我们观察其 Random 对象的 nextInt(int) 方法,发现这个方法将生成 0 ~ 参数之间随机取值的整数。例如(假设先有 Random rand = new Random();,下同):
rand.nextInt(100);
这行代码将生成范围 0~100 之间的随机数,有趣的是,取值可能为 0 ,但不可能为 100。我们用中学数学课学习的区间表示法,表示为:[0, 100)。
那么如果要获得区间 [1~100] 的随机数,该怎么办呢?稍微动动脑筋就可以想到:区间 [0, 100) 内的整数,实际上就是区间 [0, 99]。因为最大边界为100,可惜不能等于100,因此最大可能产生的“整数”就是99。
既然 rand.nextInt(100) 获得的值是区间 [0, 99],那么在这个区间左右各加 1,就得到了区间 [1, 100]。因此,代码写成:
rand.nextInt(100) + 1;
即可。运行下面的代码,将获得 [1, 100] 的 10 个取值。
//// 代码段 3 //////////////////////////////////////////////////////////////
import java.util.Random;
public class Test {
public static void main(String[] args){
Random rand = new Random();
for(int i=0; i<10; i++) {
System.out.println(rand.nextInt(100) + 1);
}
}
}
//// 代码段 3 结束 /////////////////////////////////////////////////////////
编译运行,输出结果为:
81
64
31
86
56
14
45
57
28
90
多次运行,结果每次都不同,但取值一定会在 1 和 100 之间,可能出现 1 和 100。
同理,很容易知道如果要获得随机两位整数,代码写成:
rand.nextInt(90) + 10;
你一定很惊讶,为什么是这么写出来的。其实,在 nextInt() 方法中作为参数的数字 90 表示:你希望生成的随机数的所有取值的可能性的数量(在本命题中,两位整数取值为 [10, 99],共90个数);加好后面的数字 10 ,表示区间的最小取值。
你可以验证下,按照这样理解,[1, 100] 的随机数,是不是应该写成 rand.nextInt(100) + 1 。千万不要把参数 100 理解为最大取值。只是区间 [1, 100] 正好从 1 开始,所以最大取值和取值可能性数量正好同为 100。
因此,
生成随机三位数的代码为:
rand.nextInt(900) + 100;
生成区间 [64, 128] 中随机值的代码为:
rand.nextInt(65) + 64;
取值可能性的数量是如何计算出来的呢?当然是 最大取值-最小取值+1 ,所以,有最终公式如下:
// For Java
int randNumber = rand.nextInt(MAX - MIN + 1) + MIN; // randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数
在微软平台下,由于 .Net Framework 提供了相应的方法来生成固定区间的整数,所以公式为:
// For C#
int randNumber = rand.Next(MIN, MAX + 1); // randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数
分享到:
相关推荐
Java生成指定范围随机数的多种代码 本文总结了 Java 中生成指定范围随机数的多种代码,涵盖了基本的 Random 对象的使用、nextInt 方法的应用、区间表示法、随机数的生成规则等知识点。 一、Random 对象和 nextInt ...
如果需要生成的随机数范围很大,这种策略可能会变得低效。这时,可以考虑使用`TreeSet`,它允许我们指定一个比较器来控制插入顺序,或者使用`ArrayList`配合`indexOf`方法来检查新生成的随机数是否已存在。 另一种...
在这个主题中,我们将深入探讨如何使用Java生成随机数以及其背后的原理。 首先,`Random`类是Java标准库中的核心类,位于`java.util`包下。要生成随机数,首先需要创建一个`Random`对象。创建实例的方式如下: ```...
若要生成指定范围内的浮点数,可以进行适当调整,如生成1.0到10.0之间的随机数: ```java double randomInRange = random.nextDouble() * 9 + 1; ``` 4. **寻找最大随机数**: 如果你想找到一系列随机数中的...
下面我们将深入探讨如何在Java中生成指定范围内不重复的随机数,以及如何将代码整合到myEclipse环境中。 首先,我们要理解Java中的`java.util.Random`类,它是生成随机数的基础。`Random`类提供了多种方法来生成...
本篇文章将深入探讨如何在Java中生成指定范围内的随机数,包括4位到36位的数字,以及结合时间戳来创建更复杂的30位随机数。 首先,Java中的`java.util.Random`类是生成随机数的主要工具。它提供了多种方法来生成...
根据给定的信息,我们可以深入探讨如何在编程环境中生成指定长度的随机数字字符串,尤其是在Java环境中。这不仅是IT领域中常见的需求之一,也是许多应用程序开发过程中不可或缺的一部分。下面将详细介绍如何理解并...
使用了ArrayList和简单的循环来达到目的。用输入数字作为触发器。
要生成指定范围内的随机数,通常会通过乘以一个适当的因素并调整范围。例如,要生成0到10之间的整数,可以使用`Math.round(Math.random() * 10)`。然而,这种方法的一个潜在问题是它并不总是能够提供均匀分布的结果...
- `nextInt(int bound)`方法用于生成一个指定范围内的整数,这个范围是从0(包括)到`bound`(不包括)。例如,`nextInt(6)`会生成0到5之间的随机整数。 - `nextDouble()`方法则生成一个0.0到1.0之间的双精度...
在提供的代码片段中,我们看到一个名为`RandomNum`的类,它扩展了随机数生成的功能,特别是用于生成指定长度的随机字符串。这个类定义了一个字符数组`ch`,包含了所有可能的字符,包括数字、大写字母、小写字母,...
在Java编程语言中,生成指定范围内的不重复随机数是一个常见的需求,这通常涉及到数组、集合、以及随机数生成器的使用。以下是一些相关的知识点: 1. **Random类**: Java中的`java.util.Random`类是用于生成...
在不指定随机数种子时 Random 类的构造函数会根据当前时间即 System.currentTimeMillis 来生成种子。每个种子对应一个序列,相同的种子则会得到相同的序列。因此,对于上文中的程序由于已经指定其种子为 20,所以...
setSeed(long s)方法用于设置随机数种子,该方法将重置随机数生成器,使其从指定的种子开始生成随机数。 3. getSeed()方法 getSeed()方法用于获取当前的随机数种子,该方法将返回当前的种子值。 4. uniform()方法...
根据范围以及生成随机数个数 生成不相同的随机数
在Java编程语言中,生成指定范围内的随机数是一项常见的任务,尤其在进行模拟、测试或者游戏开发时。这里我们将深入探讨如何使用Java API来生成指定范围的随机整数,并了解其背后的逻辑。 Java中用于生成随机数的...
在Java编程语言中,生成随机数是常见的需求,可以用于模拟、测试、加密等多种场景。本文将详细探讨Java中生成随机数的两种主要方法:`java.lang.Math.random()`静态方法和`java.util.Random`类。 首先,我们来看`...
使用`java.util.Random`类可以生成指定范围内的随机数。创建一个HashSet存储随机数,然后在一个循环内不断生成随机数并尝试添加到集合中,直到达到所需的数量。示例如下: ```java import java.util.Random; ...
这个方法首先初始化一个空字符串`res`,然后在一个循环中生成指定长度的随机字符并添加到结果字符串中。在每次迭代中,根据参数设置,它会决定是生成小写字母、大写字母、数字还是特殊字符。 - `get_L_C()`方法生成...
通过设置范围和种子,可以生成指定长度的数字串,如8位数。 2. **去除重复**:为了确保生成的随机数不重复,可以使用HashSet或数据库来存储已经生成过的随机数,每次生成新数时,都会先检查该数是否已存在,如果不...