在 Java 中生成一个范围内的随机数

原文:https://www.studytonight.com/java-examples/generating-random-numbers-in-a-range-in-java

Java 提供了一些生成随机数的方法,但是要在特定范围内生成随机数是相当棘手的。在本教程中,我们将学习如何利用内置的 Java 方法来实现给定范围内的随机数生成器方法。

使用数学随机()方法

数学类的 random()方法用于生成一个介于 0 和 1 之间的十进制值(包括 0,不包括 1)。

public class RandomRangeDemo
{
    public static void main(String[] args)
    {
        double r1 = Math.random();
        double r2 = Math.random();
        System.out.println("The first random number is: " + r1);
        System.out.println("The second random number is: " + r2);
    }
}

第一个随机数为:0.8998047971282644 第二个随机数为:0.94659999991

我们可以使用这个方法来构建我们自己的随机方法,该方法将获取最小和最大范围值,并将返回该范围内的随机数。

  • 我们将在方法中使用公式(math . random()*(max-min))+min
  • 这个公式是有效的,因为如果 Math.random()生成 0(最低值),那么(0 *(最大-最小值))+ min 将等于 min。
  • 如果 Math.random()生成 1(最高值),那么公式将给出 1 * (max-min) + min,等于 max。
  • 但是请记住,Math.random()不会返回 1,而是返回一个略小于 1 的值(比如 0.999999)。所以我们函数的最大返回值会略小于 max。
  • 因此,我们的方法返回一个介于最小值和最大值之间的值(包括最小值,不包括最大值)
public class RandomRangeDemo
{
    public static int randomNumberGenerator(int min, int max)
    {
        double r = Math.random();
        int randomNum = (int)(r * (max - min)) + min;
        return randomNum;
    }
    public static void main(String[] args)
    {
        int r1 = randomNumberGenerator(5, 105);//random number between 5 and 105
        int r2 = randomNumberGenerator(2199, 2200);//random number between 2199 and 2200
        System.out.println("The first random number is: " + r1);
        System.out.println("The second random number is: " + r2);
    }
}

第一个随机数为:47 第二个随机数为:2199

我们也可以使用 Random 类的 nextDouble()和 nextFloat()方法来代替 Math.random()方法。所有这些方法都会生成一个介于 0 和 1 之间的随机十进制数。

使用 nextDouble()方法的上述代码如下所示。

import java.util.Random;

public class RandomRangeDemo
{
    public static int randomNumberGenerator(int min, int max)
    {
        Random r = new Random();
        double randomNum = r.nextDouble();
        int result = (int)(randomNum * (max - min)) + min;
        return result;
    }
    public static void main(String[] args)
    {
        int r1 = randomNumberGenerator(5, 105);//random number between 5 and 105
        int r2 = randomNumberGenerator(2199, 2200);//random number between 2199 and 2200
        System.out.println("The first random number is: " + r1);
        System.out.println("The second random number is: " + r2);
    }

}

第一个随机数为:53 第二个随机数为:2199

使用随机类的 nextInt()方法

nextInt()方法可用于生成随机整数。如果我们将一个正参数 n 传递给这个方法,那么它将返回一个范围在 0 到 n(包括 0,不包括 n)之间的随机数。

import java.util.Random;

public class RandomRangeDemo
{
    public static void main(String[] args)
    {
        Random r = new Random();
        int randomNum1 = r.nextInt(100);
        int randomNum2 = r.nextInt(1);
        System.out.println("The first random number is: " + randomNum1);
        System.out.println("The second random number is: " + randomNum2);
    }

}

第一个随机数为:63 第二个随机数为:0

我们将使用这个方法来构建我们自己的随机数生成器方法。我们将使用公式 nextInt(max-min) + min 。让我们试着理解这个公式。

例如,如果 max = 31,min = 7,那么(max-min)将等于 24。因此,nextInt(24)将生成一个介于 0 和 24 之间的随机数。如果它生成 0(最低值),那么 0 + min 将等于 7。如果它生成 24(最大值),那么 24 + min 将等于 31,这是最大值。因为 nextInt(n)不包括 n 值,所以我们的方法也不包括最大值。

import java.util.Random;

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

    public static void main(String[] args)
    {
        int randomNum1 = randomNumberGenerator(500, 2000);//random number between 500 and 2000
        int randomNum2 = randomNumberGenerator(500, 501);//random number between 500 and 501
        System.out.println("The first random number is: " + randomNum1);
        System.out.println("The second random number is: " + randomNum2);
    }

}

第一个随机数为:846 第二个随机数为:500

使用随机类的 ints()方法

java.util.Random.ints()方法可以返回随机生成的无限整数流。我们可以指定一个范围,所有的随机数都会在这个范围内生成。我们还可以指定流的大小,这样我们只能得到有限数量的整数。

以下代码无限运行,因为我们没有为 ints()方法指定流大小。我们只显示了输出中的几个数字。

import java.util.Random;
import java.util.stream.IntStream;

public class RandomRangeDemo
{    
    public static void main(String[] args)
    {
        Random r = new Random();
        IntStream stream = r.ints(10, 20);
        stream.forEach(s -> System.out.println(s));
    }

}

11 16 16 14 12 13

现在让我们通过设置流大小来生成 5 个随机整数。

import java.util.Random;
import java.util.stream.IntStream;

public class RandomRangeDemo
{    
    public static void main(String[] args)
    {
        Random r = new Random();
        IntStream stream = r.ints(5, 100, 120);
        stream.forEach(s -> System.out.println(s));
    }

}

103 106 114 117 109

我们可以使用 findFirst()和 getAsInt()方法,只从流中获取第一个随机数。

import java.util.Random;
import java.util.stream.IntStream;

public class RandomRangeDemo
{    
    public static void main(String[] args)
    {
        int min = 150, max = 2000;//defining the range

        Random r = new Random();
        IntStream stream = r.ints(1, min, max);
        int randomNum = stream.findFirst().getAsInt();

        System.out.print("The random number is: " + randomNum);
    }

}

随机数为:1193

摘要

在本教程中,我们学习了在指定范围内生成随机数的不同方法。我们使用数学类的内置 random()方法和 Random 类的 nextInt()实现了我们的方法。我们还可以直接使用 ints()方法来生成给定范围内的随机数流。