C#选择范围内的随机数

时间:2014-06-12 12:21:53

标签: c# random windows-phone

我想生成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
    }
 }

由于

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

因为每个人都喜欢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);
}

没有重复...

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