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

来源:2-8 编程练习

whyo

2017-12-10 00:14:55

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回答

好帮手慕珊

2017-12-10

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

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

按照这个思路再试试看。

祝学习愉快!

0
hhyo
回复
hHappy
h 是的下面就是遍历循环,输出的就是数组中对应的数字的switch语句。我的代码:我首先设定了一个循环,给它随机赋值,然后再嵌套一个查询是否存在重复的循环,我觉得老师的意思是以为我说随机赋值的循环数组0不能设定,但是我的意思实际是嵌套的查重循环在发现重复以后将变量设0,而++是在循环结束一次以后才+1,那么再一次随机时就无法判断下标为0的那个数组,看明白我的意思了吗。。
h017-12-11
共6条回复

THappy

2017-12-11

以下实例可供参考:
创建一个包含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]
}

1
hhyo
h 好的谢谢你
h017-12-14
共1条回复

0 学习 · 14452 问题

查看课程