Java生成随机数
1 Java生成随机数的方式
在Java编程中,我们经常需要在开发应用程序时生成随机数。许多应用程序具有随机生成数字的功能。
随机数是使用大量数字并使用数学算法选择一个数字的数字。它满足以下两个条件:
- 生成的值在确定的时间间隔内均匀分布。
- 无法根据当前和过去的值来猜测未来的值。
在Java中,使用方法和类可以通过四种方式生成随机数。
- 使用random()方法
- 使用Random类
- 使用ThreadLocalRandom类
- 使用Random类的ints()方法(Java 8新增)
2 方式一:使用random()方法
2.1 介绍
Java Math类具有许多用于不同数学运算的方法。其中之一是random() 方法。它是Math类的静态方法。我们可以直接调用它。它仅生成大于或等于0.0且小于1.0的双精度型随机数。在使用random() 方法之前,我们必须导入java.lang.Math类。
2.2 语法
public static double random()
该方法不接受任何参数。它返回一个大于或等于0.0且小于1.0的伪随机双精度数。
2.3 案例1
让我们创建一个使用random() 方法生成随机数的程序。
/**
* 一点教程网: http://www.yiidian.com
*/
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
在上面的公式中,最小值是包括在内的,而最大值是包括在内的。
2.4 案例2
/**
* 一点教程网: http://www.yiidian.com
*/
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);
}
}
第一次输出结果为:
Random value of type double between 200 to 400:
233.88329802655377
Random value of type int between 200 to 400:
329
第二次输出结果为:
Random value of type double between 200 to 400:
254.8419979875385
Random value of type int between 200 to 400:
284
3 方式二:使用Random类
产生一个随机数的另一种方法是使用Java的Random类,该类在java.util包中。它生成伪随机数流。我们可以生成任何数据类型的随机数,例如整数,浮点数,双精度型,布尔型和长型。如果要使用此类生成随机数,请按照以下步骤操作:
- 首先,导入类java.lang.Random。
- 创建一个Random类的对象。
- 调用以下任何一种方法:
- nextInt(int bound)
- nextInt()
- nextFloat()
- nextDouble()
- nextLong()
- nextBoolean()
以上所有方法均从该随机数生成器的序列返回下一个伪随机,均质分布的值(对应的方法)。nextDouble() 和nextFloat() 方法产生0.0到1.0之间的随机值。
nextInt(int bound) 方法接受绑定(upper)的参数必须为正。它会生成一个介于0到bound-1之间的随机数。
让我们创建一个使用Random类生成随机数的程序。
/**
* 一点教程网: http://www.yiidian.com
*/
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
4 方式三:使用ThreadLocalRandom类
java.util.concurrent包中定义的ThreadLocalRandom类,该类可以使用内部生成的种子初始化来生成随机数,与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)
上面的方法解析(upper)必须为正的参数边界。它返回介于0(含)和指定边界(不含)之间的相应随机生成的值。如果边界为负,则抛出IllegalArgumentExcetion。
- nextInt(int origin, int bound)
- nextDouble(int origin, int bound)
- nextLong(int origin, int bound)
上述方法解析两个参数origin和bound。原点指定返回的最小值,界限指定上限。它返回指定的原点(包括)和边界(排除)之间的相应随机生成的值。另外,如果原点大于或等于bound ,则抛出IllegalArgumentExcetion。
让我们创建一个使用ThreadLocalRandom类生成随机数的程序。
/**
* 一点教程网: http://www.yiidian.com
*/
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);
}
}
第一次输出结果为:
Randomly Generated Integer Values:
348534891
-1887936727
Randomly Generated Double Values:
0.15644440033119833
0.5242730752133399
Randomly Generated Boolean Values:
true
true
第二次输出结果为:
Randomly Generated Integer Values:
402755574
295398333
Randomly Generated Double Values:
0.4856461791062565
0.5148677091077654
Randomly Generated Boolean Values:
false
true
5 方式四:使用Random类的ints()方法
在Java 8中,新方法ints() 已添加到Random类。使用该方法之前,我们必须导入java.util.Random。
5.1 ints()方法 :
伪随机整数值生成与调用nextInt() 方法相同。它返回无限的伪随机整数值流。
5.2 ints(long streamSize)方法 :
该方法解析long类型的参数streamSize。它指定要生成的值的数量。伪随机整数值生成与调用nextInt()方法相同。它还返回随机生成的int值的流。如果流大小小于零,则抛出IllegalArgumentException。
5.3 ints(long streamSize, int randomNumberOrigin, int randomNumberBound)方法:
参数:
- streamSize:要生成的值的数量。
- randomNumberOrigin:每个随机值的来源
- randomNumberBound:每个随机值的界限
它返回具有指定起点和界限的伪随机整数值流。如果发生以下情况,则抛出IllegalArgumentException:
- stramSize < 0
- origin > = bound
5.4 ints(int randomNumberOrigin, int randomNumberBound)方法:
参数:
- randomNumberOrigin:每个随机值的来源
- randomNumberBound:每个随机值的界限
它以指定的原点和边界返回无限制的伪随机整数值流。如果原点大于或等于bound ,则抛出IllegalArgumentException。
同样,我们也可以分别使用longs() 和doubles() 方法生成long和double类型的流。
让我们创建一个使用Random类的ints() 方法生成整数流的程序。
/**
* 一点教程网: http://www.yiidian.com
*/
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);
}
}
第一次输出:
727900357
-1073118456
306279822
370327182
1366265119
65
75
75
88
76
75
56
86
85
第二次输出:
-1338107947
-1698771421
594232770
-1224937976
-1625069815
56
69
67
87
64
52
72
75
76
热门文章
优秀文章