如何在Java中生成随机数
在
Java 编程中,我们经常需要在开发过程中
生成随机数应用程序。许多应用程序具有
随机生成数字的功能,例如验证用户是否许多应用程序使用
OTP 。随机数的最好例子是骰子。因为当我们扔它时,我们得到一个1到6之间的随机数。
在本节中,我们将学习什么是
随机数和
Java如何生成随机数。
随机数
随机数是使用大量数字并使用数学算法选择一个数字的数字。它满足以下两个条件:
生成的值在确定的时间间隔内均匀分布。
不可能根据当前和过去的值来猜测未来的价值。
在Java中生成随机数
在Java中,使用该方法和类可以通过三种方式生成随机数。
使用 random()方法
使用 Random 类
使用 ThreadLocalRandom 类
使用 ints()方法(在Java 8中)
使用Math.random()方法
Java
Math 类具有许多用于不同数学运算的方法。其中之一是
random()方法。它是Math类的
static 方法。我们可以直接调用它。它仅生成
double 类型的随机数
大于或等于0.0 和
小于1.0 。在使用random()方法之前,我们必须导入
java.lang.Math 类。
语法:
public static double random()
它不接受任何参数。它返回一个大于或等于0.0且小于1.0的伪随机双精度数。
让我们创建一个使用random()方法生成随机数的程序。
RandomNumberExample1.java
import java.lang.Math;
public class RandomNumberExample1{
public static void main(String args[]) {
// Generating random numbers
System.out.println("1st Random Number: " + Math.random());
System.out.println("2nd Random Number: " + Math.random());
System.out.println("3rd Random Number: " + Math.random());
System.out.println("4th Random Number: " + Math.random());
}
}
输出:
1st Random Number: 0.17434160924512265
2nd Random Number: 0.4297410090709448
3rd Random Number: 0.4828656381344487
4th Random Number: 0.13267917059488898
记住: 每次执行程序时,我们得到不同的输出。您的输出可能与上面显示的输出不同。
如果我们想在指定范围之间生成随机数,我们也可以使用以下公式。
Math.random() * (max - min + 1) + min
在上面的公式中,最小值包含所有最大值,而最大值除外。
让我们创建一个程序,该程序生成200到400之间的随机数。
RandomNumberExample2.java
public class RandomNumberExample2{
public static void main( String args[] ) {
int min = 200;
int max = 400;
//Generate random double value from 200 to 400
System.out.println("Random value of type double between "+min+" to "+max+ ":");
double a = Math.random()*(max-min+1)+min;
System.out.println(a);
//Generate random int value from 200 to 400
System.out.println("Random value of type int between "+min+" to "+max+ ":");
int b = (int)(Math.random()*(max-min+1)+min);
System.out.println(b);
}
}
输出1:
Random value of type double between 200 to 400:
233.88329802655377
Random value of type int between 200 to 400:
329
输出2:
Random value of type double between 200 to 400:
254.8419979875385
Random value of type int between 200 to 400:
284
使用随机类
生成随机数的另一种方法是使用java.util包的
Random 类。它生成伪随机数流。我们可以生成任何数据类型的随机数,例如整数,浮点数,双精度型,布尔型和长型。如果要使用此类生成随机数,请按照以下步骤操作:
首先,import java.lang.Random 。
创建Random类的对象。
调用以下任何一种方法:
nextInt(int bound)
nextInt()
nextFloat()
nextDouble()
nextLong()
nextBoolean()
以上所有方法都从该随机数生成器的序列中返回下一个伪随机,均匀分布的值(对应的方法)。
nextDouble()和
nextFloat()方法会生成0.0到1.0之间的随机值。
nextInt(int bound)方法接受必须为正的参数绑定(上部)。它会生成一个介于0到边界1之间的随机数。
让我们创建一个使用Random类生成随机数的程序。
RandomNumberExample3.java
import java.util.Random;
public class RandomNumberExample3{
public static void main(String args[]) {
// creating an object of Random class
Random random = new Random();
// Generates random integers 0 to 49
int x = random.nextInt(50);
// Generates random integers 0 to 999
int y = random.nextInt(1000);
// Prints random integer values
System.out.println("Randomly Generated Integers Values");
System.out.println(x);
System.out.println(y);
// Generates Random doubles values
double a = random.nextDouble();
double b = random.nextDouble();
// Prints random double values
System.out.println("Randomly Generated double Values");
System.out.println(a);
System.out.println(b);
// Generates Random float values
float f=random.nextfloat();
float i=random.nextfloat();
// Prints random float values
System.out.println("Randomly Generated float Values");
System.out.println(f);
System.out.println(i);
// Generates Random long values
long p = random.nextLong();
long q = random.nextLong();
// Prints random long values
System.out.println("Randomly Generated long Values");
System.out.println(p);
System.out.println(q);
// Generates Random boolean values
boolean m=random.nextBoolean();
boolean n=random.nextBoolean();
// Prints random boolean values
System.out.println("Randomly Generated boolean Values");
System.out.println(m);
System.out.println(n);
}
}
输出:
Randomly Generated Integers Values
23
767
Randomly Generated double Values
0.37823814494212016
0.998058172671956
Randomly Generated float Values
0.87804186
0.93880254
Randomly Generated long Values
-4974823544291679198
3650240138416076693
Randomly Generated boolean Values
false
true
使用ThreadLocalRandom类
ThreadLocalRandom 类在
java.util.concurrent 包中定义。它是使用内部生成的种子初始化的,与Math类的随机生成器相同。无法修改。我们可以通过以下方式使用此类:
ThreadLocalRandom.current().nextX(...)
其中X为Int,Long等
注意: 不可能意外地与多个线程共享ThreadLocalRandom。
我们可以生成任意数据类型的随机数,例如整数,浮点数,双精度型,布尔型和长型。如果要使用此类生成随机数,请按照以下步骤操作:
首先,使用 java.util.concurrent.ThreadLocalRandom 导入类。
调用您要为其随机生成数字的相应方法。
nextInt()
nextDouble()
nextLong()
nextFloat()
nextBoolean()
以上所有方法都将覆盖Random类的相应方法并返回相应的值。
nextInt(int bound)
nextDouble(int bound)
nextLong(int bound)
上述方法解析参数
bound (upper),该参数必须
为正。它返回介于0(含)和指定范围(不含)之间的相应随机生成的值。如果边界为负,则抛出
IllegalArgumentExcetion 。
nextInt(int origin, int bound)
nextDouble(int origin, int bound)
nextLong(int origin, int bound)
上述方法解析两个参数
origin 和
bound 。原点指定返回的
最低值,界限指定
上限。它返回指定的原点(包括)和边界(排除)之间的相应随机生成的值。另外,如果原点大于或等于边界,则抛出
IllegalArgumentExcetion 。
让我们创建一个使用
ThreadLocalRandom类生成随机数的程序。
RandomNumberExample4.java
import java.util.concurrent.ThreadLocalRandom;
public class RandomNumberExample4{
public static void main(String args[]) {
// Generate random integers between 0 to 999
int a = ThreadLocalRandom.current().nextInt();
int b = ThreadLocalRandom.current().nextInt();
// Print random integer values
System.out.println("Randomly Generated Integer Values:");
System.out.println(a);
System.out.println(b);
// Generate Random double values
double c = ThreadLocalRandom.current().nextDouble();
double d = ThreadLocalRandom.current().nextDouble();
// Print random doubles
System.out.println("Randomly Generated double Values:");
System.out.println(c);
System.out.println(d);
// Generate random boolean values
boolean e = ThreadLocalRandom.current().nextBoolean();
boolean f = ThreadLocalRandom.current().nextBoolean();
// Print random Booleans
System.out.println("Randomly Generated boolean Values:");
System.out.println(e);
System.out.println(f);
}
}
输出1:
Randomly Generated Integer Values:
348534891
-1887936727
Randomly Generated double Values:
0.15644440033119833
0.5242730752133399
Randomly Generated boolean Values:
true
true
输出2:
Output 2:
Randomly Generated Integer Values:
402755574
295398333
Randomly Generated double Values:
0.4856461791062565
0.5148677091077654
Randomly Generated boolean Values:
false
true
类似地,我们可以使用
ThreadLocalRandomclass 的其他方法。
Java 8中的随机数生成
在Java 8中,在Random类中添加了一个新方法ints()。使用该方法之前,我们必须导入
java.util.Random 。
ints():
伪随机整数值生成与调用nextInt()方法相同。它返回无限个伪随机整数值流。
ints(long streamSize):
该方法解析参数
streamSize 类型长。它指定要生成的值的数量。伪随机整数值生成与调用nextInt()方法相同。它还返回随机生成的int值的流。如果流大小小于零,则会引发
IllegalArgumentException 。
ints(长streamSize,int randomNumberOrigin,int randomNumberBound):
参数:
streamSize: 要生成的值数。
randomNumberOrigin: 每个随机值的起源
randomNumberBound: 每个随机值的界限
它返回具有指定起点和界限的伪随机整数值流。如果出现以下情况,它将抛出
IllegalArgumentException :
stramSize <0
起源> =绑定
ints(int randomNumberOrigin, int randomNumberBound):
参数:
randomNumberOrigin: 每个随机值的来源
randomNumberBound: 每个随机值的界限
它将返回具有指定起点和界限的无限个伪随机整数值流。如果原点大于或等于bound,则会抛出
IllegalArgumentException 。
类似地,我们还可以使用
longs()来生成long和double类型的流。 和
doubles()方法。
让我们创建一个程序,该程序使用
ints()方法生成整数流。
RandomNumberExample5.java
import java.util.Random;
public class RandomNumberExample5
{
public static void main(String[] args)
{
randomInts(5);
randomInts(9, 50, 90);
//getStreamOfRandomInts(30, 50);
}
//method that generates a stream of integers having size 5
public static void randomInts(int num)
{
Random random = new Random();
random.ints(num).forEach(System.out::println);
}
//method that generates a stream of 9 integers between 50 to 90
public static void randomInts(int num, int origin, int bound)
{
Random random1 = new Random();
random1.ints(num, origin, bound).forEach(System.out::println);
}
}
输出1:
727900357
-1073118456
306279822
370327182
1366265119
65
75
75
88
76
75
56
86
85
输出2:
-1338107947
-1698771421
594232770
-1224937976
-1625069815
56
69
67
87
64
52
72
75
76