黑马程序员技术交流社区

标题: 输出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 编辑
  1. class  demo09
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr = new int[10];
  6.        go: for (int i = 0; i < 10; i++) {
  7.                 int a = (int)(Math.random()*20+1);
  8.                
  9.                      //这个for循环判断第一次的时候,i=0 j=0,j<i吗?不小于 就直接跳出循环 并没有给arr[0]赋值 所以一直为0
  10.                         for (int j = 0; j < i; j++) {
  11.                                  System.out.println("*"+i+"*");//可以用这句输出语句验证 i=0 没有进入过循环
  12.                                 if (a==arr[j]) {
  13.                                         i--;
  14.                                        continue go;
  15.                                 }
  16.                                 else {
  17.                                         arr[i] = a;   
  18.                                         System.out.println(i+"*");
  19.                                 }
  20.                         }
  21.         }
  22.         for (int i = 0; i < arr.length; i++) {
  23.                
  24.         }
  25.         }
  26. }
复制代码


作者: 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