Java中的Random类主要用来生成随机数,通常搭配一些其他的方法来生成我们需要的随机数,因为开发中应用范围不是太广,所以今天来分享一下Random类中常用的几种方法。

1.random.nextInt()

random.nextIn()的作用是随机生成一个int类型,因为int 的取值范围是 -2147483648——2147483647 ,所以生成的数也是处于这个范围,下面是示例代码。

Random random = new Random();
System.out.println("int:"+random.nextInt());
System.out.println("Integer.MIN-Integer.MAX:"+Integer.MIN_VALUE+"-"+Integer.MAX_VALUE);

输出:
int:-1849568817
Integer.MIN-Integer.MAX:-2147483648-2147483647

在上述代码中,我们使用了Integer.MIN_VALUEInteger.MAX_VALUE,这两个是Integer类设定的最小值和最大值。在Java的八种基础数据类型中,除了boolean为true和false之外,其他的七种类型都是有MIN_VALUE和MAX_VALUE这两个值的,所以我们可以通过这几种基础数据类型相对应的引用数据类型+.MIN_VALUE或.MAX_VALUE就可以得到基础数据类型的最大值和最小值。

java radom乱数 javarandom方法_java radom乱数

2.random.nextInt(int bound)

random.nextInt(int bound)方法的作用是生成一个0-参数bound范围内的随机数,但是要记住,参数bound必须是正数,不可为负数,否则在运行时会报java.lang.IllegalArgumentException: bound must be positive的错误,提示bound必须是正数,下面看用法:

Random random = new Random();
System.out.println("int:"+random.nextInt(20));

输出:
int:12

3.random.nextLong()

random.nextLong()会随机生成一个Long类型,同理,因为Long的取值范围是 -9223372036854775808——9223372036854775807,所以也会生成一个这个区间的数。

Random random = new Random();
System.out.println("Long:"+random.nextLong());
System.out.println("Long.MIN-Long.MAX:"+Long.MIN_VALUE+"-"+Long.MAX_VALUE);

输出:
Long:-5059225360401714325
Long.MIN-Long.MAX:-9223372036854775808-9223372036854775807

4.random.nextDouble()

random.nextDouble()会生成一个0-1的double类型,而不是生成double取值范围中的数,下附取值范围,就不多说了。

Random random = new Random();
System.out.println("double:"+random.nextDouble());
System.out.println("Double.MIN-Double.MAX:"+Double.MIN_VALUE+"-"+Double.MAX_VALUE);

输出:
double:0.9059561641891956
Double.MIN-Double.MAX:4.9E-324-1.7976931348623157E308

在输出double的取值范围时,我们会发现是4.9E-324-1.7976931348623157E308,会有一个大写字母E+数字的组合,这就是科学计数法,E代表10,后面跟多少数字,就代表是10的多少次方,如下:

System.out.println("double E1 = "+4.9E1);
System.out.println("double E2 = "+4.9E2);
System.out.println("double E3 = "+4.9E3);
System.out.println("double E4 = "+4.9E4);
System.out.println("double E-1 = "+4.9E-1);
System.out.println("double E-2 = "+4.9E-2);
System.out.println("double E-3 = "+4.9E-3);
System.out.println("double E-4 = "+4.9E-4);

输出:
double E1 = 49.0
double E2 = 490.0
double E3 = 4900.0
double E4 = 49000.0
double E-1 = 0.49
double E-2 = 0.049
double E-3 = 0.0049
double E-4 = 4.9E-4

在科学技术法中,当E后是正数时,只有从E7,也就是10的7次方开始才使用科学计数法表示,在E后是负数时,在E-4,也就是10的-4次方开始使用科学计数法表示。

5.random.nextFloat()

random.nextFloat()会生成一个随机的0-1之间的浮点型,大体同double一样,下附取值范围。

Random random = new Random();
System.out.println("float:"+random.nextFloat());
System.out.println("Float.MIN-Float.MAX:"+Float.MIN_VALUE+"-"+Float.MAX_VALUE);

输出:
float:0.56538385
Float.MIN-Float.MAX:1.4E-45-3.4028235E38

6.random.nextBoolean()

random.nextBoolean()会生成一个true或false,这个想必就不用多说了。

Random random = new Random();
System.out.println("boolean:"+random.nextBoolean());

输出:
boolean:false

7.random.nextBytes(byte[] bytes)

random.nextBytes()会为一个byte类型的数组随机赋值,具体如下所示:

Random random = new Random();

byte[] bytes = new byte[5];

random.nextBytes(bytes);
for (int i = 0; i < bytes.length; i++) {
	byte aByte = bytes[i];
	System.out.print(aByte+"\n");
}

输出:
25
43
75
-84
-36

因为byte的取值范围为 -128到127,所以也就是说会为一个byte类型的数组在-128,127这个区间内重新随机赋值,此处“重新随机赋值”划重点,也就是说,即使原本的byte数组里面有值,那么也会重新覆盖掉,看下面的例子:

Random random = new Random();

byte[] bytes = {1,2,3,4,5};

random.nextBytes(bytes);
for (int i = 0; i < bytes.length; i++) {
	byte aByte = bytes[i];
	System.out.print(aByte+"\n");
}

输出:
15
82
-67
74
72

8.random.nextGaussian()

random.nextGaussian()的作用是随机生成一个高斯分布的浮点数,具体什么是高斯分布,小伙伴们可以自行百度一下,本人只是粗略了解,也不好细说,还是看用法吧。

Random random = new Random();
for (int i = 0; i < 50; i++) {
	if(i % 5 == 0){
		System.out.print("\n");
	}
	System.out.print(random.nextGaussian()+"\t");
}

输出
0.23887985879210802	-0.9617517115209373	-0.7310298442527218	0.060675255123321455	2.3028675413581086	
0.4807480559098755	0.19749526765375996	1.107307002104576	0.8729308549572491	1.7926021967090964	
-0.05935633370030737	-2.3210221850587227	-0.6377865724068819	-0.7626926952975743	-1.1944252800370256	
-0.0950028233550837	0.32367629717018137	-0.38937823661336124	0.9536905904785448	0.44357226494324903	
2.083500311831977	-0.23015961529101175	1.4646049357930837	1.3345713742936534	0.1665529809249803	
1.3165533068264064	0.3256581547018778	0.2285771381453708	-0.5689451870599477	-1.265991294683088	
-1.5566759317562093	0.30847902615010453	0.6697716213007865	0.6214732015551208	0.46187917219586727	
-0.4990443240348566	-0.6353880042505946	0.8433862988590144	1.6690553001008204	0.18505536592837407	
-0.28148806860582576	-0.16037858145085357	6.709333136467725E-4	-0.1860336557308238	0.5554098841671794	
0.044651030125437315	-0.14404705820536534	0.047725565972889454	0.43339518441476116	1.1141049066539972

好了,今天就为大家分享这么多,剩下的其他方法有时间我会再写的。有不同意见的可以在评论区指出,我们可以相互学习探讨。