Java获取不重复的随机整数(非轮询比较循环排除法)
2014-05-03 13:06
381 查看
这里只讨论随机整数,一般用于生成不重复的随机密码。
比较常见的方法是:每次在获取随机数后都与之前获取的数进行比较,如果重复就重新获取。个人比较杞人忧天,担心每次重新获取的随机数还是重复的,所以就不太敢用这种方法。
个人的方法是根据需要先定义一个有序数组,然后进行无序排列,最后进行顺序或者倒序截取。
直接上代码:
比较常见的方法是:每次在获取随机数后都与之前获取的数进行比较,如果重复就重新获取。个人比较杞人忧天,担心每次重新获取的随机数还是重复的,所以就不太敢用这种方法。
个人的方法是根据需要先定义一个有序数组,然后进行无序排列,最后进行顺序或者倒序截取。
直接上代码:
//1.从0-9中获取任意个不重复的整数(0<len<11) static int[] getRandom10(int len){ //根据需要自定义有序数组 int[] ra=new int[10]; for(int i=0;i<10;i++){ ra[i]=i; } //无序排列实际上i最大到8即可,因为当i=9时,10-i=1,rd.nextInt(10-i)=0,ra[0]与ra[0]无所谓交换 for(int i=0;i<10;i++){ Random rd=new Random(); int temp1=rd.nextInt(10-i); int temp2=ra[9-i];//保存相对末尾的数据 ra[9-i]=ra[temp1];//交换 ra[temp1]=temp2; } //上面的i实际上<9即可,因为当i=9时,temp1=rd.nextInt(10-9)=0,ra[temp1]与ra[9-i]均指代ra[0],无所谓交换 //顺序截取 int[] returnInt=new int[len]; for(int i=0;i<len;i++){ returnInt[i]=ra[i]; } //返回 return returnInt; } //2.从0-99中获取任意个不重复的整数(0<len<101) static int[] getRandom100(int len){ //根据需要自定义有序数组 int[] ra=new int[100]; for(int i=0;i<100;i++){ ra[i]=i; } //无序排列,只重复len次 for(int i=0;i<len;i++){ Random rd=new Random(); int temp1=rd.nextInt(100-i); int temp2=ra[99-i];//保存相对末尾的数据 ra[99-i]=ra[temp1];//交换 ra[temp1]=temp2; } //倒序截取 int[] returnInt=new int[len]; for(int i=0;i<len;i++){ returnInt[i]=ra[99-i]; } //返回 return returnInt; } //3.随机获取一个6位数的整数,要求数字不重复,不含0 static int getRandom6(){ int returnNum=0; //自定义有序数 int[] ra=new int[9]; for(int i=0;i<9;i++){ ra[i]=i+1; } //无序排列并取值 for(int i=0;i<6;i++){ returnNum*=10; Random rd=new Random(); int temp1=rd.nextInt(9-i); int temp2=ra[8-i];//保存相对末尾的数据 ra[8-i]=ra[temp1];//交换 ra[temp1]=temp2; returnNum+=ra[8-i];//取值 } return returnNum; } //4.该方法可以类推到字母等,自己写O(∩_∩)O~
相关文章推荐
- 用Java语言产生1~30之间的7个随机整数,且不能重复,并与用户输入的7个数作比较,设置相应的奖项
- js 随机获取10个不重复的1~20之间的整数数组
- java获取随机不重复的数得值
- java中实现35选7的为随机,选出7个不重复的随机整数之hashmap去重
- 获取10个随机的0~20的整数,且要求不重复
- java判断循环数组是否连续并获取不连续的项以及重复项
- Java简单易懂的生成不重复随机整数数组的方法
- 随机出不重复的数字(不用随机出然后进行比较 JAVA实现)
- java判断循环数组是否连续并获取不连续的项以及重复项
- 【Java】随机生成范围[min,max]之间的整数数组,且元素值不重复
- java判断循环数组是否连续并获取不连续的项以及重复项
- 简单但比较高效的解决:随机获取N个数字,这些数字在指定的范围内,获取的数字不能重复
- Java基础编程1—比较三个整数的大小
- 【Java】随机生成不重复的字母数组
- Java生成随机不重复推广码邀请码
- Java生成随机不重复邀请码(数字+字母)
- 随机生成10个不重复的整数
- 编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。
- 比较Java循环的性能
- java 和 c等作用域问题,循环中重复定义变量