在一定范围内生成无重复的随机数 [英] Generate random number without duplicate in certain range

查看:159
本文介绍了在一定范围内生成无重复的随机数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个应用程序,它会生成随机数。所以每次它会生成三个数字num1,num2和num3。这些数字不应重复。例如,如果num1 = 1而不是num2而num3不能等于1.我尝试过这段代码,它会显示三个不同的数字,范围从0到2。它的工作。但是我想生成1-3,2-4,3-5等随机数。那么我如何通过使用下面的代码来实现这一目标。因为我是新手,所以请帮助我。谢谢。

I'm currently creating an app and it will generate random numbers. So each time it will generate three numbers num1, num2 and num3. These number should not be duplicate. For example if num1 = 1 than num2 and num3 cannot be equal to 1. I've tried this code where it will display three different number ranging from 0-2. And its working. However I would want to generate random number ranging from 1-3, 2-4, 3-5 and so on. So how can I achieve this by using the code below. Please help me since I'm new to this. Thank you.

for(int i=0; i<images.length; i++)
{
        num[i] = (int)(Math.random()*3);

        if (i == 0)
        {
        if(num[i]== 0)
            images[i].setImageResource(R.drawable.zero);
        else if(num[i]==1)
            images[i].setImageResource(R.drawable.one);
        else
            images[i].setImageResource(R.drawable.two);
        }

        else
        {
            while (num[i] ==  num[i-1] || num[i] == num[0] )
                num[i] = (int)(Math.random()*3);


        if(num[i]==0)
            images[i].setImageResource(R.drawable.zero);
        else if(num[i]==1)
            images[i].setImageResource(R.drawable.one);
        else
            images[i].setImageResource(R.drawable.two);

        }
    }


推荐答案

如果范围内的所有数字都创建一个列表,那么随机播放列表:

Create a list if all numbers in the range, then shuffle the list:

List<Integer> numbers = new ArrayList<>();
// eg for range 3-5
for (int i = 3; i <= 5; i++)
    numbers.add(i);
Collections.shuffle(numbers);

现在以新的(随机)订单使用它们。

Now use them in their new (random) order.

除非您的范围非常大(数百万)否则这将正常工作。

Unless your range is very large (millions) this will work fine.

Java8版本:

List<Integer> numbers = IntStream.rangeClosed(3, 5).boxed().collect(Collectors.toList());
Collections.shuffle(numbers);

这篇关于在一定范围内生成无重复的随机数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆