生成指定范围内的随机数

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

Java 在其 MathRandom 类中提供了多种内置方法来生成随机数。然而,生成指定范围内的随机数可能具有一定的挑战性。在本实验中,你将学习生成范围内随机数的不同方法,包括:


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/BasicSyntaxGroup(["`Basic Syntax`"]) java(("`Java`")) -.-> java/ProgrammingTechniquesGroup(["`Programming Techniques`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java(("`Java`")) -.-> java/FileandIOManagementGroup(["`File and I/O Management`"]) java(("`Java`")) -.-> java/SystemandDataProcessingGroup(["`System and Data Processing`"]) java/BasicSyntaxGroup -.-> java/output("`Output`") java/BasicSyntaxGroup -.-> java/math("`Math`") java/ProgrammingTechniquesGroup -.-> java/method_overloading("`Method Overloading`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("`Classes/Objects`") java/FileandIOManagementGroup -.-> java/stream("`Stream`") java/SystemandDataProcessingGroup -.-> java/math_methods("`Math Methods`") subgraph Lab Skills java/output -.-> lab-117409{{"`生成指定范围内的随机数`"}} java/math -.-> lab-117409{{"`生成指定范围内的随机数`"}} java/method_overloading -.-> lab-117409{{"`生成指定范围内的随机数`"}} java/classes_objects -.-> lab-117409{{"`生成指定范围内的随机数`"}} java/stream -.-> lab-117409{{"`生成指定范围内的随机数`"}} java/math_methods -.-> lab-117409{{"`生成指定范围内的随机数`"}} end

使用 Math 类生成随机数

我们可以使用 Math.random() 方法来生成一个介于 0 和 1 之间的浮点值,这适用于生成随机数。然而,生成特定范围内的浮点值仍然具有挑战性。

在这个方法中,我们将利用 Math.random() 方法的公式生成一个介于 minmax 之间的随机数(包括 min,但不包括 max)。

以下是代码示例:

public static int randomNumberGenerator(int min, int max) {
    double r = Math.random();
    int randomNum = (int) (r * (max - min)) + min;
    return randomNum;
}

要使用此方法,调用 randomNumberGenerator() 方法并传入最小值和最大值的整数参数;该方法将返回一个介于指定范围内的随机整数。

以下是使用 randomNumberGenerator() 生成两个随机数的代码;第一个随机数应在 5 到 105 的范围内,第二个随机数应在 2199 到 2200 的范围内。

int r1 = randomNumberGenerator(5, 105);
int r2 = randomNumberGenerator(2199, 2200);

要执行此方法,请在终端中运行以下命令:

$ cd project
$ touch RandomNumbers.java
// 粘贴代码
$ javac RandomNumbers.java
$ java RandomNumbers

使用 Random 类生成随机数

另一种生成指定范围内随机数的方法是使用 Random 类中的 nextInt() 方法。

nextInt() 方法生成一个范围在 [0, n) 内的整数值。

public static int randomNumberGenerator(int min, int max) {
    Random r = new Random();
    int randomNum = r.nextInt(max - min) + min;
    return randomNum;
}

该方法接收 minmax 参数,并返回一个指定范围内的随机整数。在此方法中,nextInt() 生成一个介于 0 到 (max-min) 之间的随机数,然后我们加上 min 值以得到最终的随机数。

以下是使用 randomNumberGenerator() 生成两个随机数的代码;第一个随机数应在 500 到 2000 的范围内,第二个随机数应在 500 到 501 的范围内。

int randomNum1 = randomNumberGenerator(500, 2000);
int randomNum2 = randomNumberGenerator(500, 501);

要执行此方法,请在终端中运行以下命令:

$ cd project
$ touch RandomNumbers.java
// 粘贴代码
$ javac RandomNumbers.java
$ java RandomNumbers

使用 Random 类的 ints() 方法

我们还可以使用 Random 类的 ints() 方法来生成一个指定范围内的随机整数流。

以下是生成流的代码:

Random r = new Random();
IntStream stream = r.ints(5, 100, 120);

在这里,ints() 方法接收三个参数:第一个是 count 参数,用于定义我们想要生成的整数数量;第二个和第三个是 bound 参数,用于定义范围。例如,在我们的代码中,bound 参数的范围是从 100 到 120。其中,最小值(100)是包含的,而最大值(120)是排除的。

创建此流后,我们可以使用 forEach() 来消费它,或者将其收集到集合(如 List 或数组)中。

以下是使用 ints() 方法生成五个介于 150 到 2000 之间的随机整数的代码:

int min = 150; // 定义最小值范围
int max = 2000; // 定义最大值范围

Random r = new Random();
IntStream stream = r.ints(5, min, max); // 生成随机流
int randomNum = stream.findFirst().getAsInt(); // 从流中获取第一个值

System.out.print("The random number is: " + randomNum); // 打印随机数

要执行此方法,请在终端中运行以下命令:

$ cd project
$ touch RandomNumbers.java
// 粘贴代码
$ javac RandomNumbers.java
$ java RandomNumbers

总结

在 Java 中生成特定范围内的随机数对于许多应用程序至关重要。在本实验中,你学习了多种生成范围内随机数的方法,例如使用 Math.random()Random.nextInt()Random.ints()。每种方法都有其优缺点,你应该选择最适合你需求的方法。

您可能感兴趣的其他 Java 教程