使用本机或内置函数生成多个随机数

时间:2013-07-11 06:04:40

标签: java random duplicates

我知道生成随机数在java中有随机函数

for example 

       int randomNumber = ( int )( Math.random() * 9999 );

将从[0,9999]生成randomNumber,但它只返回给定范围内的一个数字。

但我只是想知道是否有任何内置函数或者你可以说本机函数会生成多个随机数并且它们也不应该相互匹配

从上面的例子中假设我想要生成4个数字

它会像1,10,50,5544那样返回

在这里你可以看到有一个四个随机数,它们彼此不匹配。

6 个答案:

答案 0 :(得分:4)

尝试这样的事情

创建ArrayList并添加随机数,同时添加检查ArrayList是否已包含该号码。

例如:

ArrayList<Integer> numbers = new ArrayList<Integer>();
while (numbers.size()<=YOUR_MAX_SIZE)
{
    int randomInteger = ( int )( Math.random() * 9999 );
    if (!numbers.contains(randomInteger)) {
    {
       numbers.add(randomInteger);
    }
}

答案 1 :(得分:4)

另一种技术(除了@MichaelShrestha所示的技术之外)是将整个数字范围放在一个集合中,然后shuffle将它放在洗牌顺序中。

它的优势在于,虽然其他方法可能会旋转许多(多个)数字来查找非重复的随机值,但这只需要运行一次。 OTOH,对于少量数字,@ Michael的技术可能会更快。

答案 2 :(得分:3)

按照提议here

尝试此操作
int min = 1;
int max = 10000;

Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;

编辑:

没有重复:

Random rng = new Random(); // Ideally just create one instance globally
int min = 1;
int max = 10000;
Set<Integer> generated = new LinkedHashSet<Integer>();
while (generated.size() < numbersNeeded)
{
    Integer next = r.nextInt(max - min + 1) + min;
    generated.add(next);
}

LINK

答案 3 :(得分:0)

没有内置api。但你可以使用这样的东西

public static int[] getRandoms(int amount, int range){
    int[] result = new int[amount];
    ArrayList tempList = new ArrayList();
    for(int i = 0; i< range; i++)
       tempList.add(i);
    Collections.shuffle(tempList);
    for(int i = 0; i< amount; i++)
       result[i] = (int)tempList.get(i);
    return result;
}

此处数量是您想要的randome数量,范围是随机数的最大范围

答案 4 :(得分:0)

    ArrayList<Integer> rnumbers = new ArrayList<Integer>(); 
    for (int i = 0; i < 4; i++) {
        int randomNumber = (int) (Math.random() * 9999);
        while (rnumbers.contains(randomNumber)) {
            randomNumber = (int) (Math.random() * 9999);
        }
        rnumbers.add(randomNumber);
    }

答案 5 :(得分:0)

由于HashSet包含唯一对象...您可以拥有唯一的随机数。

Set uniqueRandomNumber = new HashSet();
 int i = 5 //number Of Random Number Required;
 for(int = 0; i<5; 1++){
    int randomNumber = ( int )( Math.random() * 9999 );
    uniqueRandomNumber.add(randomNumber);
 }