商店的规模50
数组random
你的50名随机数的候选人保持初始设置为random.length
。所以一个柜台,这里counter
将被初始化为49.
然后从0
生成一个数字r
到counter-1
并选择random[r]
作为您的号码。
现在继续并使用random[counter-1]
替换random[r]
。递减counter
,以便下次只搜索数组的前49个元素,并在您选择数字时继续此过程。
现在只是如果你想,你以前没有选择一个数字,从0
到counter-1
使random[r]
来自阵列,这将是在年初的独特元素产生r
。
int[] randoms= new int[50];
.
. //populate your array with the candidate numbers
.
int counter= randoms.length;
Random rand = new Random();
public int getUnique(){
//Get a random number in the range 0 to counter-1
int r = rand.nextInt(counter);
int myElement = randoms[r];
randoms[r] = randoms[counter-1];
randoms[counter-1]= myElement;
counter--;
return myElement;
}
,只要你想,以允许重复,产生从0
的r
到random.length -1
并选择random[r]
为你的电话号码。请注意,我们还是要保持跟踪所用的数字,使getUnique()
仍然有效:
public int getAny(){
//Get a random number in the range 0 to random.length-1
int r = rand.nextInt(random.length);
int myElement = randoms[r];
if(r < counter){
randoms[r] = randoms[counter-1];
randoms[counter-1]= myElement;
counter--;
}
return myElement;
}
来源
2012-12-26 20:28:53
AFS
我会在纸上绘制逻辑。你可以使用if-then逻辑,但我认为有很多方法可以为这个猫皮肤 – Coffee
如果你使用'List'而不是数组,你可以利用[contains()](http://docs.oracle.com)。 com/javase/6/docs/api/java/util/List.html#包含%28java.lang.Object%29)方法。 –