c#选择范围内的随机数

本文关键字:随机数 范围内 选择 | 更新日期: 2023-09-27 18:08:31

我想在1到30之间的范围内生成一系列随机数,理想情况下,这个数字会改变(最大为+10),但始终具有1 - 30的范围。我希望在需要的时候能够多次这样做。我想要在这个范围内生成的数字在数字上是不同的,例如,我可能只需要2个或5个数字。

我认为我应该生成一个静态类,并使用相同的随机实例,该方法接受一个整数,该整数表示我需要在范围内的数字总数?显然,每次调用从该方法返回的数字不应该是相同的数字。但是,如果一个方法调用产生与前一个调用相同的数字,那就没问题,但理想情况下它们应该不同。

我不确定我将如何编码这个,或者如果我完全错了?

示例代码:

 public static class getMyNumbers
 {
    private static Random random = new Random();
    public static int[] getThese(int i)
    {
        int[] wanted = new int[i];
        // a loop to generate the numbers???
        // this bit I'm not sure about the syntax
        // new to c#
        return wanted
    }
 }

谢谢

c#选择范围内的随机数

你只需要循环将数字放入数组:

public static int[] getThese(int i)
{
    int[] wanted = new int[i];
    for (int j = 0; j < i; ++j)
        wanted[j] = random.Next(31);
    return wanted;
}

注意,random.Next()的参数是一个排他的上范围,所以传递31将生成0到30之间的随机数。

顺便说一句,请注意习惯上使用n来表示计数,而使用i来表示循环变量,因此这样命名变量可能会更好:
public static int[] GetThese(int n)
{
    int[] result = new int[n];
    for (int i = 0; i < n; ++i)
        result[i] = random.Next(31);
    return result;
}

就因为大家都喜欢Linq:

private static Random random = new Random();
public IEnumerable<int> GetRandomInts(int Amount, int Max = 30)
{
    return Enumerable.Range(0, Amount).Select(a => random.Next(Max)+1);
}

For no duplicate…

return Enumerable.Range(1, Max).OrderBy(a => random.Next()).Take(Amount);