一个int数组里边有n个数字,我现在要随机取出其中的几个,并且取出的数字不重复,请问应该用什么方法呢?谢谢!

解决方案 »

  1.   

    ArrayList list=new ArrayList(50);
        for(int i=0;i<50;i++){
          list.add(new Integer(i));
        }
        Collections.shuffle(list);
        int reqnum=10;//需要取多少个
        for(int i=0;i<reqnum;i++){
          System.out.println(list.get(i));
        }用Collections.shuffle(list);将list打乱,然后直接取就可以了如果本来数组里面就有重复的,将数组放入HashSet,然后再转成list就可以了
    当然也可以随机遍历数组,发现取过就放弃,不过觉得不够方便
      

  2.   

    哈哈, fool_leave 的动作可真快
    我只能在想一种办法了。int ai[] = new int[108];
    //生成108个数字放到数组中ai中。
    for (int i = 0; i < 108; i++)
    ai[i] = i;//打乱顺序
    for (int j = 0; j < ai.length; j++) 
    {
    //Math.floor:返回最大的(最接近正无穷大)double 值,该值小于或等于参数,并且等于某个整数。
    int i1 = (int) Math.floor(Math.random() * 108D);
    int j1 = ai[i1];
    ai[i1] = ai[j];
    ai[j] = j1;
    }//输出;
    for(int i=0; i<108; i++)
    {
    System.out.println(i + " = " +ai[i]);
    }