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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

郑健初

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 郑健初 初级黑马   /  2012-6-7 18:08  /  1728 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.ArrayList;
import java.util.Random;
public class GetRandomList {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                String[] brand = { "A","2","3","4","5","6","7","8","9","10","J","Q","K"} ;
                ArrayList al=new ArrayList();//用ArrayList集合来存储brand里面的元素
                for(int i=0;i<brand.length;i++){
                        al.add(brand[i]);
                }
                Random rad =new Random(System.currentTimeMillis());//产生随机数
                System.out.println(rad);
                ArrayList randomArr=new ArrayList();//创建一个新集合来存储随即元素
                for(int i=0;i<brand.length;i++){   //疑问1、我将brand.length改为al.size 得出结果长度会少几位?他们的长度应该一样才对啊
                        int index=rad.nextInt(brand.length-i);//疑问2、 对Random类不是很熟悉,Random()和nextInt()里面放的数会对产生的随机数有什么影响呢?
                        randomArr.add(al.get(index));
                        al.remove(index);//去掉集合里已抽取的元素 避免重复
                }
                System.out.println(randomArr);
        }
}
这个程序我想实现类似随机洗牌的功能,通过查资料做出来的,所以有2个地方不太明白,
疑问1、我将brand.length改为al.size 得出结果长度会少几位?他们的长度应该一样才对啊。
疑问2、 对Random类不是很熟悉,Random()和nextInt()里面放的数会对产生的随机数有什么影响呢?
有空的朋友帮忙解答下呗,不胜感激。



评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

2 个回复

正序浏览
杨康 发表于 2012-6-7 18:35
public static void main(String[] args) {
                // TODO Auto-generated method stub
        ...

是将al.size()加入到第2个 for循环的判断条件中,得出长度不同
回复 使用道具 举报
public static void main(String[] args) {
                // TODO Auto-generated method stub
                String[] brand = { "A","2","3","4","5","6","7","8","9","10","J","Q","K"} ;
                ArrayList al=new ArrayList();//用ArrayList集合来存储brand里面的元素
                for(int i=0;i<brand.length;i++){
                        al.add(brand[i]);
                }
                System.out.println(brand.length);//长度13
                System.out.println(al.size());//大小13   这两个就是一样大啊 不知道你是怎么写。

                Random rad =new Random(System.currentTimeMillis());//产生随机数
                System.out.println(rad);
                ArrayList randomArr=new ArrayList();//创建一个新集合来存储随即元素
                for(int i=0;i<brand.length;i++){   //疑问1、我将brand.length改为al.size 得出结果长度会少几位?他们的长度应该一样才对啊
                        int index=rad.nextInt(brand.length-i);//疑问2、 对Random类不是很熟悉,Random()和nextInt()里面放的数会对产生的随机数有什么影响呢?
                        randomArr.add(al.get(index));
                        al.remove(index);//去掉集合里已抽取的元素 避免重复
                }
                System.out.println(randomArr);
        }

下面再说一下Random()和nextInt()
Random()是构造方法,构造方法有两个其中一个是无参,另一个就是有参的Random(long seed),这个seed参数是伪随机数生成器的内部状态的初始值,调用 new Random(seed) 等效于:
Random rnd = new Random();
rnd.setSeed(seed);

nextInt()是方法,也有两个一个无参,一个有参:nextInt(int n) ,其中参数n的意思是指返回随机数的范围。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马