2011-04-28 179 views
0


是否可以在Java中执行此操作?我想生成一个随机数,例如给定一个范围,例如:在1到70之间 - 每次生成随机数时,它应该从生成结果中排除。
所以[1,70]兰特= 56(现在56不应当被认为在下一次)
[1,70] = 63(现在56,63应排除代直到我的代码运行)随机数生成和排除生成的数字

+0

复制到一个问题:** [Java的创建随机数,没有重复(http://stackoverflow.com/questions/4040001/java-creating-random-numbers-with-no-duplicates)** – lschin 2011-04-28 03:42:39

回答

3

这相当于将包含[1..70]的数组进行混洗,然后逐个处理它们。在Google上查找“洗牌算法”。这里有一个链接http://www.vogella.de/articles/JavaAlgorithmsShuffle/article.html

+1

或者更好地使用JDK附带的shuffle算法。 http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.List) – 2011-04-28 03:47:43

+0

是的,我忘记了那里。 – 2011-04-28 03:48:46

1

您可以将范围填充到数组中并随机播放数组。这对于非常大的范围来说效率很低

1

另一个微不足道的选择是使用HashMaps来跟踪随机数。 这是一种快速和肮脏。

HashMap<Integer,Integer> hmRandomNum = new HashMap<Integer,Integer>(); 

Integer a = < generate random number> 

if(hmRandomNum.get(a) == null) 
{ 
    hmRandomNum.put(a,a); 
} 
else 
{ 
    // ignore this random number. this was already selected and present in the hashmap. 
} 

//Iterate depending on how many numbers you want.