黑马程序员技术交流社区
标题:
输出1-20之间10个随机数,不能重复,请大神帮忙看下哪里
[打印本页]
作者:
纸心丶醉月
时间:
2015-8-23 22:42
标题:
输出1-20之间10个随机数,不能重复,请大神帮忙看下哪里
public class Practice1 {
public void random(){
int[] arr = new int[10];
go:for (int i = 0; i < 10; i++) {
int a = (int)(Math.random()*20+1);
for (int j = 0; j < i; j++) {
if (a==arr[j]) {
i=i-1;
continue go;
}
else {
arr[i] = a;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
}
我输出结果arr[0]始终是0,其他都没错,没看出哪里错了
作者:
史柯
时间:
2015-8-24 08:36
代码好像没有问题
作者:
pengbeilin
时间:
2015-8-24 09:12
哥们,我不知道你学了Random类和Set集合了没有~ 这个题用Set集合存储是最简单的
作者:
血马雄风
时间:
2015-8-24 09:34
支持Set,使用它再简单不过了
作者:
liuwuzhou
时间:
2015-8-24 09:43
是不是把main方法没写的原因
作者:
pengbeilin
时间:
2015-8-24 09:44
本帖最后由 pengbeilin 于 2015-8-24 09:49 编辑
class demo09
{
public static void main(String[] args)
{
int[] arr = new int[10];
go: for (int i = 0; i < 10; i++) {
int a = (int)(Math.random()*20+1);
//这个for循环判断第一次的时候,i=0 j=0,j<i吗?不小于 就直接跳出循环 并没有给arr[0]赋值 所以一直为0
for (int j = 0; j < i; j++) {
System.out.println("*"+i+"*");//可以用这句输出语句验证 i=0 没有进入过循环
if (a==arr[j]) {
i--;
continue go;
}
else {
arr[i] = a;
System.out.println(i+"*");
}
}
}
for (int i = 0; i < arr.length; i++) {
}
}
}
复制代码
作者:
yankaibang
时间:
2015-8-24 11:54
else里面的语句应该放for循环外面吧,代表前面都没有重复就设置arr[i],而不是一有不重复就设置arr[i].
这样也可以避免第一次for循环进不去,arr[0]没有被设置
既然随机值只有1~20的话,也可以通过ArrayList和remove的方法来实现
1、定义ArrayList集合,元素1~20
2、获取index,取值随机0~len
3、通过remove(index)获取元素
4、重复2、3步骤
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2