@[FAT-Remcal|从倔强青铜到最强王者]
Super Java|在指定数列中随机生成多个不重复的数值的算法
传说,这是一个程序员必备技能,于是mark一下。
应用场景
- 考试系统随机不重复抽题;
- 播放器随机播放列表;
- 随机抽样模型;
- 随机分配工作地点;
- 地图引擎随机线路;
- 分布式系统随机分配符合要求的请求处理服务器;
- 随机点名系统;
code1:
//用于在指定数列中,随机生成多个不重复的数算法
public static void computerSelection(int[] redBall,int[] userRedBall){
//随机生成6个数,最优的算法应该是6次循环(连续取6次,都不重复)
Random r = new Random();
int index = -1;//随机生成数组的下标
for(int i=0;i<userRedBall.length;i++){
index = r.nextInt(redBall.length-i);
userRedBall[i] = redBall[index];
//数值交换
int temp = redBall[index];
redBall[index] = redBall[redBall.length-1-i];
redBall[redBall.length-1-i] = temp;
}
}
code2:
//循环嵌套理解:外层循环(i)进行每一次循环,内层循环(j)进行6次循环(length为6)
for(int i=0;i<userRedBall.length;i++){
for(int j=0;j<sysRedBall.length-redCount;j++){
if(userRedBall[i]==sysRedBall[j]){
int temp = sysRedBall[j];
sysRedBall[j] = sysRedBall[sysRedBall.length-1-redCount];
sysRedBall[sysRedBall.length-1-redCount] = temp;
redCount++;
break;
}
}
}
遗留问题
code1:int isAuto = input.nextInt();//其中的next是何解?或者并无深刻内涵?为什么不用this或the?
code2:break中断的是哪层循环?