我想生成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
}
}
由于
答案 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);