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); }
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); } }
List<Integer> list = new ArrayList<Integer>(n - m + 1); 应改为 List<Integer> list = new LinkedList<Integer>(); 因为要不停remove,所以应该用linkedList
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);
}
这个帖子讨论过。
我的方法(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);
}
}
应改为
List<Integer> list = new LinkedList<Integer>();
因为要不停remove,所以应该用linkedList