java-随机数去重
随机函数
是在java
的入门学习中会经常使用得一种函数,在随机生成的应用场景中,比如:随机生成密码、随机生成验证码、随机生成一个数字等等。
随机函数的介绍
随机函数有两种方式:
-
Random
Random是一个类,使用该随机函数要先声明一个Random对象,在声明Random对象后,在Random中封装了很多的方法,调用Random方法生成相应基本数据类型的的随机数据方法是:
nextXxx()
方法来生成指定数据类型的范围的数据。例如class RandomTest{ public static void main(String[] args){ //声明对象 Random rd=new Random(); //随机生成0-6以内的数据 int t=rd.nextInt(6); //随机生成1-6以内的数据 int x=rd.nextInt(6)+1; } }
-
Math.random
:默认范围为[0.0,1.0)
在Math工具类中的随机函数返回值类型是double
,如果要返回int或者是其他数据类型,则需要进行类型的强制转换
class RandomTest{
public static void main(String[] args){
//随机生成0-6以内的数据
int t=(int)((Math.random()*6);
//随机生成1-6以内的数据
int t=(int)((Math.random()*6+1);
}
}
计算随机数的公式两者通用以Math.random为例:
生成[0, Num)
Math.random() * Num生成[Min, Max)
Min + (Math.random() * (Max - Min))生成[Min, Max]
Min + (int)(Math.random() * ((Max - Min) + 1))
随机数去重的方法
在生成随机数的过程中我们会发现在生成多个数据时会出现相同的数据,如果有一个需求是要在一个数组中生成不重复随机的数据。这就是随机数的去重问题。
如果在有以下需求,在一个长度为10的int
数组中,要求在[1,20]范围内在数组中生成不重复的值。实现代码如下所示
import java.util.Arrays;
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
//声明Random类的对象
Random random=new Random();
int[] arr=new int[10];
for(int i=0;i<arr.length;i++){
// 调用Random对象的nextInt()方法,生成范围在[1,20]的数据
arr[i]=random.nextInt(20)+1;
for(int j=0;j<i;j++){
// 通过比较数组存在中的数据,如果数据中有相同的数据,退出内层循环并且i--,就再重新生成一个随机数据,直到在数组中没有相同数据
if(arr[i]==arr[j]){
i--;
break;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
利用Set集合实现随机数去重的方法
学习过集合的小伙伴都知道Set接口的特性:set集合是无序的不可重复的
此方法只是简单的使用了双层for循环,也只是随机函数去重的一种基础的方法,还有其他的方法,此方法更适用于初学者。