黑马程序员技术交流社区

标题: 基础班学习:随机打印该已知数组中的三个数 [打印本页]

作者: duguwen    时间: 2017-3-28 11:08
标题: 基础班学习:随机打印该已知数组中的三个数
还没有学到集合,考虑到拿出的三个数不重复的情况,随手做的,应该能达到要求,但就是感觉不简洁。
思路:每拿到已知数组里的一个随机数,就将其他数放到一个新生成的长度为arr.length-1数组中,三次提取分别在三个不同的数组中,得到结果。
Random ran = new Random();
                int[] arr = {12, 3, 21, 45, 28, 16, 7, 36, 90, 11};
                int[] arr1 = new int[arr.length-1];
                int[] arr2 = new int[arr1.length-1];
               
                int a = ran.nextInt(arr.length);
                for(int i=0,j=0;i<arr1.length;i++){
                        if(i==a)
                                continue;
                        arr1[j] = arr[i];
                        j++;
                }
               
                int b = ran.nextInt(arr1.length);
                for(int i=0,j=0;i<arr2.length;i++){
                        if(i==a)
                                continue;
                        arr2[j] = arr1[i];
                        j++;
                }
               
                int c = ran.nextInt(arr2.length);
                System.out.println(arr[a]+","+arr1[b]+","+arr2[c]);
作者: hailong5214    时间: 2017-3-28 11:36
随机生成3个不同的数,在0-length之间 的,然后索引找值就可以了,怎么看你的这么麻烦
作者: duguwen    时间: 2017-3-28 19:05
数组长度不能改变,但可以在 随机抽取的数组角标上做文章:
                 *                 每次抽取一个数,可抽取的角标数-1
                 *                 数组最后的元素值再赋给被抽取到的元素角标上
                 *                 随机生成 1-(n-1-1)的随机数即要抽取的数组元素角标
                 *                 参考资料:java核心技术卷1 P83
int[] array = {12, 3, 21, 45, 28, 16, 7, 36, 90, 11};
                int[] result = new int[3];
                int n = array.length;
                for(int i = 0 ; i < result.length ; i++){
                        int d = (int) (Math.random()*n);
                        result[i] = array[d];
                       
                        array[d] = array[n-1];
                        n --;
                }
                Arrays.sort(result);
                for (int i : result) {
                        System.out.println(i);
                }
作者: duguwen    时间: 2017-3-28 19:06
hailong5214 发表于 2017-3-28 11:36
随机生成3个不同的数,在0-length之间 的,然后索引找值就可以了,怎么看你的这么麻烦 ...

随机生成的角标可能是重复的
作者: 可可心bug    时间: 2017-4-1 12:34
菜鸟加油 鼓励下 希望你也能关注我




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2