问题描述
importjava.util.Random;publicclassRandomDemo01{publicstaticvoidmain(Stringarg[]){Randomran=newRandom();inttemp=ran.nextInt(7)+1;intarr[]=newint[7];for(inti=0;i<7;i++){for(intj=0;j<i;j++){if(arr[j]==temp){temp=ran.nextInt(7)+1;j=0;}}arr[i]=temp;}for(inti=0;i<7;i++){System.out.print(""+arr[i]);}}}程序是想做到7个不一样的数,但是运行的结果会出现重复的:7243617,反复查找没找到问题所在,求高手赐教;下面的程序是一个能运行正确的程序importjava.util.Random;publicclassRandomDemo02{publicstaticvoidmain(Stringargs[]){Randomran=newRandom();intarr[]=newint[7];for(inti=0;i<7;i++){arr[i]=ran.nextInt(7)+1;for(intj=0;j<i;j++){if(arr[i]==arr[j]){i--;break;}}}for(inti=0;i<7;i++){System.out.print(""+arr[i]);}}}
解决方案
解决方案二:
上面这个代码逻辑太混乱了。
解决方案三:
……没了格式,我编辑下去
解决方案四:
那是因为ran.netInt(7)是产生随机数的当然可能重复:而正确的程序中增加了如下代码:for(intj=0;j<i;j++){if(arr[i]==arr[j]){i--;break;}}
这个就是验证数组中是否有重复的数据,如果已经有了本次产生的随机数就不再放入数组中了,i--就是这个道理。
解决方案五:
for(inti=0;i<7;i++){for(intj=0;j<i;j++){if(arr[j]==temp){temp=ran.nextInt(7)+1;j=0;}}arr[i]=temp;}第一个程序也增加了个判断是否有重复的,就是不知道错误在哪里;
解决方案六:
无法编辑有回复的贴子,大家把程序复制放到开发工具里头去看下。解答下。谢谢了哈。
解决方案七:
Random本来就是有可能产生俩个相同的随机数的,所以需要做个逻辑来判断。下面的程序当判断数组中两个数相同的时候,就会让数组的下标回退以便获得不同的随机数。
解决方案八:
if(arr[j]==temp){temp=ran.nextInt(7)+1;j=-1;}每次j=0之后会j++,所以从1开始判定,永远是和arr[0]重复,j=-1以后再自加才是从0开始
解决方案九:
自己判断一下重复的去掉就可以了
解决方案十:
不想有重复存在set里
解决方案十一:
7楼的大大,太谢谢了,成功解决问题,我咋就没想到是j++的问题呢。
解决方案十二:
不重复的随机数还是用Collection比较直观。publicstaticvoidmain(Stringarg[]){Randomran=newRandom();inttemp;List<Integer>list=newArrayList<Integer>();for(inti=0;i<7;i++){do{temp=ran.nextInt(7)+1;}while(list.contains(temp));list.add(temp);}System.out.print(list);}
解决方案十三:
引用7楼futurepk4dike的回复:
if(arr[j]==temp){temp=ran.nextInt(7)+1;j=-1;}每次j=0之后会j++,所以从1开始判定,永远是和arr[0]重复,j=-1以后再自加才是从0开始
正解
解决方案十四:
楼主的思路不对啊
解决方案十五:
你把if(arr[j]==temp){temp=ran.nextInt(7)+1;j=0;}
里面的j=1改为j=-1试下。
解决方案:
在11楼的基础上做了以下修改。publicstaticListgetRandomList(intnumber){Randomran=newRandom();inttemp;List<Integer>list=newArrayList<Integer>();for(inti=0;i<number;i++){do{temp=ran.nextInt(number)+1;}while(list.contains(temp));list.add(temp);}returnlist;}
解决方案:
要获取7个不重复的数,做法应该是用一个列表,把7个数放进去,然后生成随机下标从数组里取数,取出后把该数从列表中删除
解决方案:
就是存在set里面就好了,干嘛整这么麻烦。