产生5个0~100的不同的随机数,若相同则重新生成,将生成的5个随机数放到数组中
import java.util.Random;
/*产生5个0~100的不同的随机数,若相同则重新生成
* 将生成的5个随机数放到数组中*/
public class RandomTest02 {
public static void main(String[] args) {
Random r1=new Random();// 创建产生随机数的对象
int[]data=new int[5];// 将产生的5个随机数放到数组中
int temp;// 用来暂时接收产生的随机数
boolean boo=false;// 判断产生的随机数是否重复,重复:true 不重复:false
for (int i=0;i<data.length;i++){// 产生5个随机数
temp=r1.nextInt(101);// 产生一个0~100的随机数
for (int j=0;j<i;j++){// 判断产生的随机数是否重复
if (temp==data[j]){// 重复
boo=true;
break;
}
}
if (!boo){// 不重复则将数据存放至数组中
data[i]=temp;
}else {// 重复则重新产生随机数
i--;
}
boo=false;// 重置判断变量,使前面的判断结果不影响后续随机数的重复判定
}
for (int i=0;i<data.length;i++){// 遍历随机数组
System.out.println(data[i]);
}
}
}
本题关键:创建数组是默认数组中元素值为0,所以需要处理元素重复问题时就需要判断这个0是数组默认值还是随机数产生的。
解决思路:判断重复时元素仅与其数组序号前面的数据进行比较,因为只有序号之前的元素被赋了随机数的值,而序号之后的元素中的只是默认值,并未赋随机数的值。
问题一:
此解决思路采用遍历的方法判断产生的随机数是否重复,但遍历用时更长,所以有人建议采用二分法查找,但是使用二分法需数组元素有序,故需先对数组元素进行排序。
但是排序的话这里就又有一个新的问题,原本产生的数据是从数组0到4放置的,排序后产生的数据就会和创建数组时的元素混淆。
解决方法:创建数组初始化赋值时赋一个大于100的数,如101,这样产生的数排序后依然在初始值之前。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界