有谁知道api中是否提供从某个整数m-n的范围中,取w个不重复的随机数的方法?
或者能够用比较简单的办法实现也可以 

解决方案 »

  1.   

    List<Integer> list = new ArrayList<Integer>(n - m + 1);for (int i = m; i <= n; list.add(i++));Random r = new Random();
    for (int i = 0; i < w; i++) {
      int randomIndex = r.nextInt(list.size());
      int randomNumber = list.get(randomIndex);
      list.remove(randomIndex );
      System.out.println(randomNumber);
    }
      

  2.   

    http://community.csdn.net/Expert/topic/4378/4378245.xml?temp=.8781244
    这个帖子讨论过。
    我的方法(1-100中取出20个不重复随机数)是:
    用一个Vector v。
    1. v中按顺序放入1-100。
    2. 取出1-v.length中一个随机数r。
    3. 返回v中的第r个元素。
    4. 在v中除去第r个元素。
    5. 重复第2步循环20遍。由于v中已取的值去掉了,所以可以保证不重复。//class variabls
    String s[20]=null;
    //get a String array contains 20 random numbers from 0-99 
    public void randomizeNumbers()
    {
    Vector v=new Vector(100);
    Random r=new Random();
    //initialize vector contains 0-99 by order
    for(int i=0;i<100;i++)
    {
    v.addElement(""+i);
    }
    for(int i=19;i>-1;i--)
    {
    //get a pseudo-random number n from 0 to vector's length
    int n=r.nextInt(i+1);
    //ss keeps the number(in String form) in vector's element listed n
    String ss=(String)v.get(n);
    //ss passes the number to s[i](in String form)
    s[i]=ss;
    //remove element listed n
    v.remove(n);
    }
    }
      

  3.   

    List<Integer> list = new ArrayList<Integer>(n - m + 1);
    应改为
    List<Integer> list = new LinkedList<Integer>();
    因为要不停remove,所以应该用linkedList