3

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

for example 

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

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

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

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

它将返回 1,10,50,5544

在这里您可以看到有一个四个随机数,并且彼此不匹配。

4

6 回答 6

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);
    }
}
于 2013-07-11T06:07:21.940 回答
4

另一种技术(除了@MichaelShrestha 显示的技术)是将整个数字范围放入一个集合中,然后其打乱并按打乱顺序获取数字。

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

于 2013-07-11T06:08:54.130 回答
3

按照这里的建议试试这个:

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);
}

关联

于 2013-07-11T06:09:31.997 回答
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);
 }
于 2013-07-11T06:25:31.143 回答
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;
}

这里的数量是你想要的随机数的数量,范围是随机数的最大范围

于 2013-07-11T06:12:36.817 回答
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);
    }
于 2013-07-11T06:14:08.143 回答