问题:随机生成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]++;//如果有重复,计数数组对应索引的值++ }