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
}
}
谢谢
你只需要循环将数字放入数组:
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);