A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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,其他都没错,没看出哪里错了

6 个回复

倒序浏览
代码好像没有问题
回复 使用道具 举报
哥们,我不知道你学了Random类和Set集合了没有~ 这个题用Set集合存储是最简单的
回复 使用道具 举报
支持Set,使用它再简单不过了
回复 使用道具 举报
是不是把main方法没写的原因
回复 使用道具 举报
本帖最后由 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. }
复制代码

回复 使用道具 举报
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步骤
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马