在 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()方法来生成给定范围内的随机数流。