生成8位随机不重复的数字编号的方法
方法 生成 数字 重复 随机 编号
2023-06-13 09:15:05 时间
packagecom.jjinfo.common.util;
importjava.util.Arrays;
importjava.util.Random;
/**
*
*/
publicclassRandomNumberGenerator{
/**
*这是典型的随机洗牌算法。
*流程是从备选数组中选择一个放入目标数组中,将选取的数组从备选数组移除(放至最后,并缩小选择区域)
*算法时间复杂度O(n)
*@return随机8为不重复数组
*/
publicstaticStringgenerateNumber(){
Stringno="";
//初始化备选数组
int[]defaultNums=newint[10];
for(inti=0;i<defaultNums.length;i++){
defaultNums[i]=i;
}
Randomrandom=newRandom();
int[]nums=newint[LENGTH];
//默认数组中可以选择的部分长度
intcanBeUsed=10;
//填充目标数组
for(inti=0;i<nums.length;i++){
//将随机选取的数字存入目标数组
intindex=random.nextInt(canBeUsed);
nums[i]=defaultNums[index];
//将已用过的数字扔到备选数组最后,并减小可选区域
swap(index,canBeUsed-1,defaultNums);
canBeUsed--;
}
if(nums.length>0){
for(inti=0;i<nums.length;i++){
no+=nums[i];
}
}
returnno;
}
privatestaticfinalintLENGTH=8;
privatestaticvoidswap(inti,intj,int[]nums){
inttemp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
publicstaticStringgenerateNumber2(){
Stringno="";
intnum[]=newint[8];
intc=0;
for(inti=0;i<8;i++){
num[i]=newRandom().nextInt(10);
c=num[i];
for(intj=0;j<i;j++){
if(num[j]==c){
i--;
break;
}
}
}
if(num.length>0){
for(inti=0;i<num.length;i++){
no+=num[i];
}
}
returnno;
}
publicstaticvoidmain(String[]args){
for(inti=0;i<10;i++){
//System.out.println(generateNumber());
System.out.println(generateNumber2());
}
}
}
相关文章
- 支付宝当面付配置网站教程以及申请方法最新教程
- protel99SE – 多张原理图生成一张总网表的方法
- 【说站】php安装扩展的几种方法
- .NET 采用 SkiaSharp 生成二维码和图形验证码及图片进行指定区域截取方法实现
- Gamma校正_c++调试方法
- Vue子组件调用父组件的方法「建议收藏」
- hbuilderx云打包ios签名的生成方法
- Python __new__()方法详解
- Redis生成全局唯一ID的实现方法
- Linux网络编程:更强大的技术与新方法(linux网络编程第二版)
- MySQL中实现随机字符串生成的方法(mysql随机字符串)
- java将File转换为MultipartFile的两种方法详解编程语言
- PHP构造方法和析构方法(__construct和__desctruct)
- 数MySQL 生成范围内随机数的简易方法(mysql范围随机)
- 串利用Oracle构建随机字符串的方法(oracle生成随机字符)
- 查询Oracle表空间:一种有效的方法(oracle表空间查询)
- 去天数Oracle日期减去N天数的实现方法(oracle日期减)
- MySQL 的 Invoke 系统命令方法(mysql调用系统命令)
- Linux查询本机IP地址的方法(linux查看本机地址)
- Linux系统快速生成符号表的方法(linux生成符号表)
- Oracle账户被锁?这些方法帮你轻松解决!(oracle账户被锁)
- Oracle生成随机数字的方法(oracle随机数字)
- 解决MySQL一直转圈的常见方法(mysql一直转圈)
- tp5实现多个redis连接一种方法(tp5多个redis)
- MySQL无法通过IP地址进行访问的问题解决方法(mysql 不能ip访问)
- Firefox2中输入框丢失光标bug的解决方法
- 使用AjaxPro.Net框架实现在客户端调用服务端的方法
- 解决远程连接mysql很慢的方法(mysql_connect打开连接慢)
- js操作textarea常用方法总结
- IE10下Gridview后台设置行高不起作用解决方法
- php生成txt文件标题及内容的方法
- C#随机生成不重复字符串的两个不错方法
- VC动态生成菜单项的实现方法
- js自动生成的元素与页面原有元素发生堆叠的解决方法