在java中,有两种Random函数,一种是在java.lang.Math.Random包下的,另一种是在java.util.Random包下的.
首先讲一下java.lang.Math.Random
调用这个函数会产生[0,1.0)区间double类型的正浮点数,具体使用例子如下:
import java.util.Random;
public class TestDemo {
public static void main(String[] args) {
// 定义一个double类型的变量来接收Math.random()函数产生的[0,1.0)区间的随机数
double b1 = Math.random();
// 生成一个[0,10.0)区间的随机数:
double b2 = Math.random() * 10;
// 生成一个[2.5,5)区间的随机数:
double b3 = Math.random() * 2.5 + 2.5;
System.out.println("[0,1.0)区间的随机数"+b1+"\n[0,10.0)区间的随机数"
+b2+"\n[2.5,5)区间的随机数"+b3);
// 打印结果:
// [0,1.0)区间的随机数0.33543326059375644
// [0,10.0)区间的随机数3.244582787241442
// [2.5,5)区间的随机数1.077578154445983
}
再讲一下java.util.Random
在Random()中,Random()的参数值指的是种子(种子,用于随机数生成的初始化值,随机数生成器对于特定的种子产生相同的随机数序列),根据种子可以创建一个新的随机数生成器,对于无参的Random(),默认当前系统时间的毫秒数作为种子,对于种子(即参数)相同的Random对象,生成的随机数序列是一样的。Random()函数也可以生成不同类型的随机数,只需要调用不同类型的方法,比如nextInt(),nextDouble()等,传递给方法参数,就可以设置产生随机数的范围,要注意的是,调用浮点类型的方法时,是不能加参数的.
补充一点
Random()函数生成的随机数本质上是伪随机数,伪随机数就是根据种子的值,用确定性的算法计算出来一串数,若函数的参数(种子)不变,那么产生的随机数的结果也不会变,简单说,Random(50).nextInt(10)产生随机数的结果是不会变的,只要Random()的参数不变,则产生的[0,10)范围内的随机数结果就不会改变
下面是实例:
例一,无参的Random:
import java.util.Random;
public class TestDemo {
public static void main(String[] args) {
Random ran = new Random();
for(int i = 0;i<5;i++){
int a = ran.nextInt(20);
double b = ran.nextDouble();
System.out.print("int类型的的值"+a);
System.out.print(" double类型的的值"+b);
}
}
这里要说一下,nextInt()里的参数,规定了随机数的范围,参数为50确定的范围是[0,50),是取不到50的.若是无参,对于int类型,随机数取值范围是int数据类型的取值范围,对于double类型,取值范围是[0,1).
例二,有参的Random
import java.util.Random;
public class TestDemo {
public static void main(String[] args) {
Random ran1 = new Random(100);
Random ran2 = new Random(100);
for(int i = 0;i<5;i++){
int a = ran1.nextInt(50);
int b = ran2.nextInt(50);
System.out.print("ran1的值"+a);
System.out.print("\tran2的值"+b);
System.out.println();
//运行结果
// ran1的值15 ran2的值15
// ran1的值0 ran2的值0
// ran1的值24 ran2的值24
// ran1的值38 ran2的值38
// ran1的值41 ran2的值41
}
}
由结果可以看出,当Random()函数的参数相同时,产生的随机数也是相同的
再说一下,如何生成不重复的随机数
方法一:
public class Time0812 {
public static void main(String[] args) {
Random random = new Random();
int[] arr = new int [5];
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(6);
for (int j = 0; j < i; j++) {
if(arr[j]==arr[i]){
i--;
//i--操作,改变了i的值,结束了第二层的for循环,进入第一层循环,重新产生一个随机数,进行循环判断
}
}
}
System.out.println(Arrays.toString(arr));
}
}
方法二:
import java.util.Random;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
public class TestDemo {
public static void main(String[] args) {
Set<Integer> set=new HashSet<Integer> ();
Random nran = new Random();
while(set.size()<10){
set.add(nran.nextInt(50));
}
for( Iterator it = set.iterator();it.hasNext();)
{
System.out.println("value="+it.next().toString());
}
}
}
使用Set<T>接口,来接收Random()函数产生的随机数,因为Set<T> 集合不允许重复的值,所以可以确保存入的随机数是不重复的,最后使用迭代器读取Set里的值.
今天的文章关于java中的Random()函数分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/28615.html