在开发应用程序时,我们经常需要生成随机数。Java提供了主要通过java.lang.Math和java.util.Random类生成随机数的支持。
java.lang.Math
java.util.Random
在本文中,我将讨论根据不同类型的需求生成随机数的不同方法。
使用数学类的随机数
Java在java中提供Math类。util软件包以生成随机数。
该数学类包含静态的数学。random () 方法生成double型随机数 。
的随机()方法返回一个双带正号的值,大于或等于0.0且小于1.0。当您调用Math时。random (),在后台是java 。实用程序。创建并使用随机伪随机数生成器对象。
您可以使用Math 。带有或不带有参数的random ()方法。如果提供参数,则该方法会在给定参数内生成随机数。
使用Math的代码。随机()方法:
public static double getRandomNumber(){ double x = Math.random(); return x; }
所述getRandomNumber的()方法使用数学。返回一个大于等于0.0且小于1.0的正double值的random ()方法。
运行代码的输出为:
Double between 0.0 and 1.0: SimpleRandomNumber = 0.21753313144345698
给定范围内的随机数 为了在给定范围之间生成随机数,您需要指定范围。实现此目的的标准表达式是:
(Math.random() * ((max - min) + 1)) + min
让我们将此表达式分解为几个步骤:
首先,将要覆盖的值范围的大小乘以Math的结果。random ()产生。
Math.random() * ( max - min ) 返回范围为[ 0 ,max – min ]的值 ,其中不包括max。例如,如果你想[ 5 ,10 ],你需要支付5个整数值,所以你可以使用数学。随机()* 5。这将在范围返回一个值[ 0 ,5 ],其中不包括5。 接下来,将此范围上移到您要定位的范围。您可以通过添加最小值来实现。 (Math.random() * ( max - min )) + min
Math.random() * ( max - min )
[ 0 ,max – min ]
[ 5 ,10 ]
()* 5
[ 0 ,5 ]
(Math.random() * ( max - min )) + min
但这仍不包括最大值。
要获得包含的最大值,您需要在范围参数(max - min )上加1。这将返回指定范围内的随机双精度数。 double x = (Math.random()*((max-min)+1))+min;
double x = (Math.random()*((max-min)+1))+min;
有多种实现上述表达式的方法。让我们看看其中的几个。
给定范围内的随机双精度 默认情况下,Math 。random ()方法在每次调用时都会返回double类型的随机数。在指定范围之间生成随机双精度值的代码为:
public static double getRandomDoubleBetweenRange(double min, double max){ double x = (Math.random()*((max-min)+1))+min; return x; }
您可以通过传递这样的参数来从main方法中调用前面的方法。
System.out.println("Double between 5.0 and 10.00: RandomDoubleNumber = "+getRandomDoubleBetweenRange(5.0, 10.00));
输出是这个。
给定范围内的随机整数 在指定范围之间生成随机整数值的代码是这样的。
public static double getRandomIntegerBetweenRange(double min, double max){ double x = (int)(Math.random()*((max-min)+1))+min; return x; }
前面的getRandomIntegerBetweenRange ()方法在给定范围之间生成一个随机整数。作为数学。random ()方法生成双精度类型的随机数,您需要截断小数部分并将其转换为int以获得整数随机数。您可以通过传递以下参数从main方法中调用此方法:
System.out.println("Integer between 2 and 6: RandomIntegerNumber = "+getRandomIntegerBetweenRange(2,6));
Integer between 2 and 6: RandomIntegerNumber = 5
注意:您可以传递一个负值范围以在该范围内生成一个随机负数。
使用随机类生成随机数
您可以使用java 。实用程序。随机类,用于生成不同类型的随机数,例如int,float,double,long和boolean。
要生成随机数,请首先创建Random类的实例,然后调用随机值生成器方法之一,例如nextInt (),nextDouble ()或nextLong ()。
Random的nextInt ()方法接受一个有界整数,并返回一个从0(含)到指定界限(不包括)的随机整数。
使用nextInt ()方法的代码是这个。
public static int generateRandomInt(int upperRange){ Random random = new Random(); return random.nextInt(upperRange); }
使用nextInt ()方法生成范围内整数的代码是:
public static int generateRandomIntIntRange(int min, int max) { Random r = new Random(); return r.nextInt((max - min) + 1) + min; }
所述nextFloat ()和nextDouble ()方法允许生成之间浮点和双精度值0.0和1.0。
使用这两种方法的代码是:
public static double generateRandomDouble(){ Random random = new Random(); return random.nextDouble(); } public static float generateRandomFloat(){ Random random = new Random(); return random.nextFloat(); }
Java 8中的随机数生成功能
Java 8在java中引入了一种新方法 ints ()。实用程序。随机类。的整数()方法返回伪随机无限流INT值。您可以通过提供最小值和最大值将随机数限制在指定范围内。
使用Random的代码。ints ()方法生成指定范围内的随机整数值是这个。
public static int getRandomNumberInts(int min, int max){ Random random = new Random(); return random.ints(min,(max+1)).findFirst().getAsInt(); }
所述getRandomNumberInts ()方法生成之间的随机整数的流分(含)和最大值(不含)。当ints ()方法产生一个IntStream时,代码将调用findFirst ()方法,该方法返回描述此流的第一个元素的OptionalInt对象。然后,代码调用getAsInt ()方法以返回OptionalInt中的int值。
使用Random的代码。生成指定随机整数值流的ints ()方法是:
public static void getStreamOfRandomInts(int num) { Random random = new Random(); random.ints(num).sorted().forEach(System.out::println); }
The code to call the preceding method is:
System.out.println("Random int stream: RandomIntStreamofSize = "); RandomDemo.getStreamOfRandomInts(5);
前面代码的输出是:
Random int stream: RandomIntStreamofSize = -1861317227 -1205557317 453883217 762357682 1725970934
使用Random的代码。ints ()方法生成一个指定范围内的指定数量的随机整数流,该流是:
public static void getStreamOfRandomIntsWithRange(int num, int min, int max) { Random random = new Random(); random.ints(num,min, max).sorted().forEach(System.out::println); }
调用上述方法的代码是:
System.out.println("Random int stream of specified size in range: RandomIntStreamofSizeInRange = "); RandomDemo.getStreamOfRandomIntsWithRange(5,0,10);
Random int stream of specified size in range: RandomIntStreamofSizeInRange = 2 2 3 4 6
除了ints ()之外,Java 8引入Random类的其他一些常用方法(可以返回顺序的随机数流)是:
概括
在java的。实用程序。随机类实现通常称为线性同余生成器(LCG)的东西。它的设计速度很快,但不满足实时使用的要求,例如用于Web服务器上的唯一会话ID生成,科学实验,密码学或涉及金钱的彩票和抽奖活动。对于这种情况,还有其他选择,我将在以后的文章中介绍。
对于不耐烦的读者,您可以看一下SecureRandom类和Xorshift随机数生成器。
此外,有趣的资源是random.org,这是一个真正的随机数服务,可通过generates声生成随机性。
random.org
原文链接:https://blog.csdn.net/Beibnjin/article/details/113827586?utm_medium=distribute.pc_category.none-task-blog-hot-1.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-1.nonecase&request_id=