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

© 15670379287 中级黑马   /  2016-4-7 22:21  /  297 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

思路:
1、将题库中符合条件的题目的题目序号查询出来放到一个list集合中。
2、根据list的size获取0-size之间的随机数,如此便可保证第三步中不会出现下标越界的情况。
3、从list中获取下标为随机数的题目序号。

可能存在的问题:判断随机数是否重复

以下为实现过程和代码:
Java代码  收藏代码
public class TestRandom2 {  
    public static void main(String[] args) {  
        //生成100到题目进行简单测试  
        List list = new ArrayList();  
        for(int i=0;i<100;i++){  
            list.add(i+1);//以(i+1)的值作为题目序号  
        }  
         
        String ids = getExamIDs(list,20);//从100道题目中抽20道  
        System.out.println("随机抽取的题目序号为:"+ids);  
        //output:随机抽取的题目序号为:51,13,64,11,78,61,66,67,81,21,16,86,24,25,69,12,72,28,1,37  
    }  
      
    /**
     * 该方法用来获取抽取题目的序号
     * @param list:指定的题目集合
     * @param count:抽题数量
     * @return String字符串,以逗号隔开
     * **/  
    public static String getExamIDs(List list,int count){  
        StringBuffer ids = new StringBuffer();  
        //1、校验不能为空  
        if(list==null || list.size()<=0) return null;  
        if(count<=0) return null;  
         
        //2、进行抽题  
        Random random = new Random();  
        Set set = new HashSet();  
        Integer randomNum = 0;  
        for(int i=0;i<count;i++){  
            //System.out.println("次数:"+i);  
            randomNum = random.nextInt(list.size());  
            while(isRepeat(randomNum.toString(),set)){//若重复就自动再次自动生成  
                randomNum = random.nextInt(list.size());  
            }  
            set.add(randomNum);//不重复的值保存到set中  
            //System.out.println("最后的随机数"+num);  
            ids.append(","+list.get(randomNum).toString());  
        }  
        String id=null;  
        if(ids.length()>1) id = ids.substring(1);//将第一个逗号去掉  
        return id;  
    }  
      
    /**
     * 该方法用来判断是否重复
     * @param num:指定的是否重复的数据
     * @param set:集合,num在该集合冲查找是否重复
     * @return flag:true或者false,true-重复 false-不重复
     * **/  
    public static boolean isRepeat(String num,Set set){  
        boolean flag = false;//true-表示重复 false-表示不重复  
        if(num==null || num.trim().length()<=0) return true;  
        //hashSet为空或者它没有结果集合,也就是说是第一次,那么一定不会重复  
        if(set==null || !set.iterator().hasNext()) return false;  
         
        String value="";  
        for(Iterator it=set.iterator();it.hasNext();){  
            value = it.next().toString();  
            //System.out.println("set中的值:"+value+"\n传过来的随机数:"+num);  
            //说明两者相同,那就是重复了  
            if(num.equalsIgnoreCase(value)){  
                flag=true;  
                break;  
            }  
        }  
        //System.out.println("结果值:"+flag);  
        return flag;  
    }  
}  

1 个回复

倒序浏览
叼,都看不懂~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马