关于java:使用本机或内置函数生成多个随机数

Generate more than one random numbers using native or built-in function

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

1
2
3
for example

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

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

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

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

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

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


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

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


尝试这样的事情

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

例如:

1
2
3
4
5
6
7
8
9
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
2
3
4
5
int min = 1;
int max = 10000;

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

编辑:

没有重复:

1
2
3
4
5
6
7
8
9
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);
}

链接


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

1
2
3
4
5
6
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);
 }

1
2
3
4
5
6
7
8
    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);
    }

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

1
2
3
4
5
6
7
8
9
10
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数量,范围是随机数的最大范围