在一定范围内生成无重复的随机数

aml*_*ndh 2 java random algorithm 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);

        }
    }
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 10

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

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

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

除非你的范围非常大(数百万),否则这样可以正常工作.


Java8版本:

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