java - 生成一定范围内不重复的随机数

标签 java algorithm random range

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

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

        }
    }

最佳答案

如果范围内的所有数字都创建一个列表,然后打乱列表:

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

现在以新的(随机)顺序使用它们。

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


Java8版本:

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

关于java - 生成一定范围内不重复的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21213577/

相关文章:

java - 有了坐标,具体区域如何设置?

c++ - 在不同操作系统上使用 UTF8 时的不同行为算法

mysql - 如何在 SQL 中设置随机值的下限

python 3 : random. 种子 () : where to call it?

java - 无法将字符串转换为正确的日期格式

java - 在UML图中表示 volatile 变量

java - JAXB - 从 url 解码

c# - 数字转换器(字符串格式的大整数)

algorithm - 优化 parking 场问题。我应该使用什么算法来匹配 parking 场中最多的汽车?

javascript - 播放从数组中随机选择的音频片段,无法弄清楚我哪里出错了