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

还没有学到集合,考虑到拿出的三个数不重复的情况,随手做的,应该能达到要求,但就是感觉不简洁。
思路:每拿到已知数组里的一个随机数,就将其他数放到一个新生成的长度为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]);

评分

参与人数 1黑马币 +5 收起 理由
可可心bug + 5 淡定

查看全部评分

4 个回复

倒序浏览
随机生成3个不同的数,在0-length之间 的,然后索引找值就可以了,怎么看你的这么麻烦
回复 使用道具 举报
数组长度不能改变,但可以在 随机抽取的数组角标上做文章:
                 *                 每次抽取一个数,可抽取的角标数-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);
                }
回复 使用道具 举报
hailong5214 发表于 2017-3-28 11:36
随机生成3个不同的数,在0-length之间 的,然后索引找值就可以了,怎么看你的这么麻烦 ...

随机生成的角标可能是重复的
回复 使用道具 举报
菜鸟加油 鼓励下 希望你也能关注我
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马