Java 生成唯一随机数的列表

Java 生成唯一随机数的列表,java,random,numbers,unique,Java,Random,Numbers,Unique,我有一个随机数生成器,它生成10个介于1和用户输入的最大值之间的数字。它工作得很好,但我想让它不会产生重复的数字。因此,如果它生成5,则其他数字都不能为5。您可以尝试拒绝采样。从一个空集合开始。生成一个数字,如果它在集合中,请重试。也就是说,继续拾取,直到找到集合中没有的数字。找到新号码后,将其添加到集合中,然后将其返回给用户 当然,如果生成了大量数字,比如k,上界是n,那么获得新数字的时间遵循几何分布(成功概率(n-k)/n),因此在找到唯一数字之前所需的预期采样数是n/(n-k)。您可以尝试

我有一个随机数生成器,它生成10个介于1和用户输入的最大值之间的数字。它工作得很好,但我想让它不会产生重复的数字。因此,如果它生成5,则其他数字都不能为5。

您可以尝试拒绝采样。从一个空集合开始。生成一个数字,如果它在集合中,请重试。也就是说,继续拾取,直到找到集合中没有的数字。找到新号码后,将其添加到集合中,然后将其返回给用户


当然,如果生成了大量数字,比如k,上界是n,那么获得新数字的时间遵循几何分布(成功概率(n-k)/n),因此在找到唯一数字之前所需的预期采样数是n/(n-k)。

您可以尝试拒绝采样。从一个空集合开始。生成一个数字,如果它在集合中,请重试。也就是说,继续拾取,直到找到集合中没有的数字。找到新号码后,将其添加到集合中,然后将其返回给用户


当然,如果生成了大量数字,比如k,上界是n,那么获得新数字的时间遵循几何分布(成功概率(n-k)/n),因此在找到唯一数字之前所需的预期采样数是n/(n-k)。

如果最大值很小,您可以使用Collection.shuffle()创建唯一值的列表。从中可以选择10个元素

如果最大值很小,可以使用Collection.shuffle()创建唯一值列表。从中可以选择10个元素

你不是第一个问这个问题的人。请参阅以获得一般性答案。

您不是第一个提出此问题的人。请参阅以获取一般答案。

为了确保该数字不重复,请将找到的数字存储在Java集合中,以便仅当该集合中没有重复时才添加

随机生成的算法可以是:

take the system time as your seed value 
use this to get the random numbers
suppose user says number between 1-100
so take system milliseconds%100 so time always  changes so maximum probability that you get random numbers.

因此,始终将种子值mod(%)作为上限,在本例中为100。

为了确保该数字不重复,请将找到的数字存储在Java集合中,以便仅当该集合中没有重复时才进行添加

int i = 0, r = 0;
    boolean ch = true;
    int[] list = new int[num];
    while (i < num)
    {
        r = rnd.nextInt(num);
        ch = true;
        for (int j = 0; j < i; j++)
            if (r == list[j])
            {
                ch = false;
                break;
            }
        if (ch)
        {
            list[i] = r;
            i++;
        }
    }
随机生成的算法可以是:

take the system time as your seed value 
use this to get the random numbers
suppose user says number between 1-100
so take system milliseconds%100 so time always  changes so maximum probability that you get random numbers.
因此,在本例中,始终将种子值mod(%)的上限设为100。

inti=0,r=0;
int i = 0, r = 0;
    boolean ch = true;
    int[] list = new int[num];
    while (i < num)
    {
        r = rnd.nextInt(num);
        ch = true;
        for (int j = 0; j < i; j++)
            if (r == list[j])
            {
                ch = false;
                break;
            }
        if (ch)
        {
            list[i] = r;
            i++;
        }
    }
布尔值ch=真; int[]列表=新的int[num]; while(i
inti=0,r=0;
布尔值ch=真;
int[]列表=新的int[num];
while(i
您使用的是什么语言?抱歉,错过了。通常,人们会标记语言,而不是将其包含在标题中。(将为他编辑)一种解决方案是使用Set而不是list。如果它生成了一个副本。set将忽略它,您可以再次生成一个新的数字。继续此操作,直到设置的大小未达到限制,即在您的情况下为10个数字。您使用的是什么语言?抱歉,错过了。通常,人们会标记语言,而不是将其包含在标题中。(将为他编辑)一种解决方案是使用Set而不是list。如果它生成了一个副本。set将忽略它,您可以再次生成一个新的数字。继续此操作,直到设置的大小未达到限制,即在您的情况下为10个数字。最大值将始终与我正在制作的程序不同。我可能在5到50岁之间。而且,它实际上是随机选取字母,我只是让它在随机数的位置得到一个字符串的字符。范围必须等于或大于你想要选择的数字。无法获得最大范围小于10的10个唯一值。e、 最大值总是因我制作的节目而异。我可能在5到50岁之间。而且,它实际上是随机选取字母,我只是让它在随机数的位置得到一个字符串的字符。范围必须等于或大于你想要选择的数字。无法获得最大范围小于10的10个唯一值。e、 g.5.在解释代码的作用和控制点上增加几点。在解释代码的作用和控制点上增加几点。