概述
目录
一、Random类基本介绍
二、Random对象的两种生成方式
三、Random类中的常用方法
3.1 基本方法
3.2 生成无限个int数据
3.3 toArray
四、经典例题
4.1 x到x平方
4.2 1-5随机到1-7随机
4.3 等概率返回0和1
4.4 简单对数器
一、Random类基本介绍
Random
类位于java.util
包下,Random
类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed
),在种子数的基础上进行一定的变换,从而产生需要的随机数字。
相同种子数的Random
对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random
对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。这点在生成多个随机数字时需要特别注意。
二、Random对象的两种生成方式
Random r = new Random();
Random r1 = new Random(10);
相同种子数的Random
对象,相同次数生成的随机数字是完全相同的。
三、Random类中的常用方法
3.1 基本方法
Random random = new Random();
System.out.println("nextInt():" + random.nextInt()); // 随机生成一个整数,这个整数的范围就是int类型的范围-2^31~2^31-1
System.out.println("nextLong():" + random.nextLong()); // 随机生成long类型范围的整数
System.out.println("nextFloat():" + random.nextFloat()); // 随机生成[0, 1.0)区间的小数
System.out.println("nextDouble():" + random.nextDouble()); // 随机生成[0, 1.0)区间的小数
System.out.println("nextBoolean():"+random.nextBoolean());//随机生成一个boolean值,生成true和false的值几率相等,也就是都是50%的几率
System.out.println("nextGaussian():"+random.nextGaussian());//随机生成呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0
byte[] byteArr = new byte[5];
random.nextBytes(byteArr); // 随机生成byte,并存放在定义的数组中,生成的个数等于定义的数组的个数
3.2 生成无限个int数据
public static void main(String[] args) {
Random random = new Random();
random.ints(); // 生成无限个int类型范围内的数据,因为是无限个,这里就不打印了,会卡死的......
random.ints(10, 100); // 生成无限个[10,100)范围内的数据
3.3 toArray
/**
* 这里的toArray 是Stream里提供的方法
*/
int[] arr = random.ints(5).toArray(); // 生成5个int范围类的整数。
System.out.println(arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 生成5个在[10,100)范围内的整数
arr = random.ints(5, 10, 100).toArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
/**
* 对于 random.ints(); random.ints(ori, des);
* 两个生成无限个随机数的方法,我们可以利用Stream里的terminal操作,来截断无限这个操作
*/
// limit表示限制只要5个,等价于random.ints(5)
arr = random.ints().limit(5).toArray();
System.out.println(arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 等价于random.ints(5, 10, 100)
arr = random.ints(10, 100).limit(5).toArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
四、经典例题
4.1 x到x平方
任意x,x属于[0,1),[0,x)范围上的数出现的概率由原来的x调整成x平方
public static double XtoXpower(){
return Math.max(Math.random(),Math.random());
}
4.2 1-5随机到1-7随机
有一个方法f1()为从一到五等可能取一个数,现在此基础上改为一到七随机取出一个数
public static int f1(){
return (int)(Math.random() * 5) + 1;
}
public static int f2(){
int ans = 0;
do {
ans = f1();
}while (ans == 3);
return ans < 3 ? 0 : 1;
}
public static int f3(){
return (f2() << 2) + (f2() << 1) + (f2() << 0);
}
4.3 等概率返回0和1
现已知方法x()会以固定概率返回0和1,但是x的内容未知,写出等概率返回0和1的方法
public static int x(){
return Math.random() < 0.84 ? 0 : 1;
}
public static void f(){
int ans = 0;
do {
ans = x();
}while (ans == x());
/*
ans = 0 1
ans = 1 0
以上两种情况等概率
*/
}
4.4 简单对数器
返回一个数组arr,arr长度[0,maxLen-1],arr中的每个值[0,maxValue-1]
public static int[] lenRandomValueRandom(int maxLen, int maxValue) {
int len = (int) (Math.random() * maxLen);
int[] ans = new int[len];
for (int i = 0; i < len; i++) {
ans[i] = (int) (Math.random() * maxValue);
}
return ans;
}
最后
以上就是独特烤鸡为你收集整理的JAVA Random类一、Random类基本介绍二、Random对象的两种生成方式三、Random类中的常用方法四、经典例题的全部内容,希望文章能够帮你解决JAVA Random类一、Random类基本介绍二、Random对象的两种生成方式三、Random类中的常用方法四、经典例题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复