2014-01-30 22 views
0

我需要从一定范围内生成4个不重复的数字。有没有有效的方法来做到这一点?如何从一定范围内生成4个不重复的数字?

+2

您的研发项目是什么意思?你有没有试图首先在Google上搜索它? –

+0

如果您需要从序列中获取数字,您可以使用原子整数或需要编写代码 – Kick

+0

http://stackoverflow.com/questions/4040001/creating-random-numbers-with-no-duplicates –

回答

1

如果您的范围是[x,y],则在[x,y-3]中生成任意4个数字。
这4个数字可以重复,没关系。
对它们排序。假设他们是:a1 < = a2 < = a3 < = a4。现在使用数字b1 = a1,b2 = a2 + 1,b3 = a3 + 2,b4 = a4 + 3,就好像它们是
生成的那样。他们在[x,y]中并且不重复。

+0

可能的重复明白你想说什么。可以更好地解释 – Kick

+1

不,这是我最好的。你觉得更难吗? –

+0

是的,这是...... – Kick

1

这是最简单的方法。

final int LIMIT = 100; 
    final int COUNT = 4; 
    Set<Integer> randomNumbers = new HashSet<Integer>(COUNT); 
    while(randomNumbers.size() < COUNT) { 
     randomNumbers.add(new Random().nextInt(LIMIT)); 
    } 
+0

理论上这可能永远不会完成,你的循环。至少它是非确定性的,即你不知道它将完成多少步。 –

0
 ArrayList<Integer> numbers= new ArrayList<Integer>(); 
     int from = 2, to = 100; 
     for(int i=from;i<=to;i++) 
     { 
      numbers.add(i); 
     } 
     Collections.shuffle(numbers); 

挑前四个数量从ArrayList中。

+0

如果你的范围长度不是太大,这很好。但是如果你有1000万个数字,那么把它们加载到内存中就是为了洗牌。 –

+0

但是如果我有大约120个数字,它会快速工作吗? –

+0

我这么认为。取决于'Collections.shuffle(numbers)'的实现方式。应该没问题,是的。 –

相关问题