产生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,这样产生的数排序后依然在初始值之前。

posted @   晚生小白  阅读(224)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示