Java基础——随机生成100个数,任何单值重复不超过两次,取值1~50之间的整数(可作为练习题锻炼自己)

问题:随机生成100个,任何单值重复不超过两次,取值1~50之间的整数
知识点:循环结构,选择结构
思路:思路其实不复杂,设置三个数组,一个用来接收随机数,一个用来接收随机数数组里不重复的数值,一个用来计数上一个不重复数组里对应元素的出现次数。判断一个数和之前的数是否重复,只需要去检索一下不重复数组里是否存在,如果不存在,赋值给不重复数组的下一个元素;如果重复,则找到对应的索引,计数数组对应的数值+1。代码如下:

        Random rand = new Random();
        final int N=100;
        int[]arr = new int[N];
        int[]uqarr = new int[N];//定义一个不重复数组
        int[]uqcnt = new int[N];//定义一个和上面数组对应的,上面每个元素对应的计数
        int ix = 0;//新的下标,用于自加
        for (int i = 0; i <arr.length ; ) {//for循环里不加循环条件,上面设置了备用的下标
            int t = rand.nextInt(50)+1;//生成一个随机数
            int tx=-1;//设置一个判断数字,初始值为-1,若满足执行条件,赋予新值
            for (int j = 0; j <ix ; j++) {//新的循环体,遍历不重复数组的已有值,找出和t重复的值
                if (t==uqarr[j]){
                    tx = j;//如果找到重复值,把与不重复数组重复的值的下标赋值给tx
                    break;//跳出for循环,执行下面语句
                }
            }
            if (tx!=-1&&uqcnt[tx]>=2)continue;//如果上面找到重复值了并且重复次数大于等于2,后面不执行;
            //如果没有重复或者重复值的次数不大于2,执行以下语句(分成两种情况,没有重复的话不重复数组要赋值,计数数组值由0变成1;有重复的话,对应的计数数组++)
            arr[i++]=t;//arr赋上新值
            if (tx==-1){//如果没有重复的话,执行以下语句(赋值给不重复数组,计数数组元素的值++,索引++)
                uqarr[ix]=t;
                uqcnt[ix++]++;
            }else uqcnt[tx]++;//如果有重复,计数数组对应索引的值++
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值