想要问问老师这个代码如何解决~

想要问问老师这个代码如何解决~

Random rd=new Random();
		int number;
		int[] sushe=new int[10];
		for(int i=0;i<10;i++) {
			number=rd.nextInt(sushe.length);
			
			//判断是否存在重复
			for(int m=0;m<sushe.length;) {
				
					if(sushe[m]==number) {
						number=rd.nextInt(sushe.length);
						
						m=0;
						}
							
						
							
						
			}

这个是想要生成1-10不重复的随机数,但是如果m=0,m++是在循环结束以后进行的,也就是说如果在数组下标为0时,这个判断重复的方法就失效了,想了很久,想要问问老师如何解决

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

你可以在循环外,给数组第一个元素直接赋值一个随机数,这个肯定是不会重复的,然后循环中就不用再判断第一个元素了。因为第一个元素肯定没有重复的,判断也没有意义。

另外,你的循环里没有看到给数组元素赋值,都是在判断是否重复,正确的做法应该是,将随机产生的数据,依次跟数组已经存放数据的元素进行比较,如果没有重复的就进行复制,否则提示重新输入。

按照这个思路再试试看。

祝学习愉快!

  • whyo 提问者 #1
    好的谢谢老师
    2017-12-10 10:22:25
  • whyo 提问者 #2
    我试了老师给的办法,没有用。。我的代码的意思是,判断是否存在重复的那个数组,当 存在重复的随机数时,将m重新变0,但是跳出循环后,此时m++,m=1,也就是m=0时的数组【0】无法判断。如果使用老师的办法,直接赋值,为什么不会重复..我没想明白
    2017-12-10 12:17:44
  • THappy 回复 提问者 whyo #3
    你这个代码最终的目的是什么呢?要得到一个保存十个不重复随机数的数组吗?还是什么?
    2017-12-11 09:56:38
THappy 2017-12-11 16:19:58

以下实例可供参考:
创建一个包含10个不重复元素的数组a的实例如下:
for(;;){//循环遍历数组,循环变量i从0开始
    int n=生成一个随机数;
    //定义boolean类型变量,用来标识生成的随机数与数组元素是否重复,初始值为false
    for(;;){//遍历数组,查询随机数n与数组中已有数据的值是否相等,循环条件是j<i
    判断n与数组元素是否相等,如果相等,则将flag值赋值为true,并跳出循环
    }
   //判断flag的值是否为true,如果为true,说明有重复数据,没有给数组元素赋值成功,
   //则外重循环的变量i值减1,重新进行循环
   //如果flag为false,表示没有重复数据,则将n的值赋值给数组元素a[i]
}

  • 提问者 whyo #1
    好的谢谢你
    2017-12-14 23:57:31
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师