0

我一直在使用以下内容:

Random r = new Random(); 
var a = r.Next(9)

生成0-9之间的随机数。

但是现在我需要随机生成以下数字之一:0,5,10,15

有没有办法我可以修改它来选择上面的数字?

4

7 回答 7

6
Random r = new Random(); 
var a = r.Next(4) * 5;

会成功的。请注意,该参数是一个排他的上限,因此永远不会生成它。您的代码示例生成 0 到 8 之间。

如果您需要一组不同的数字,您可以执行以下操作:

int[] possible = new int[] { 0, 5, 10, 15 };
Random r = new Random(); 
int a = possible[r.Next(possible.length)];
于 2013-06-22T05:44:37.187 回答
4
Random rnd = new Random();

//create a pre-defined list
int[] nums = new int[] {0, 5, 10, 15};

int rndNum = nums[rnd.Next(nums.Length)];

您甚至可以重复循环以从数组中的一组每个定义的数字中生成一个以上的随机数。

于 2013-06-22T05:44:53.937 回答
1

生成一个 0 到 3 之间的随机数,然后简单地将其用作数组的索引:

像这样的东西(伪代码):

var nums = [0, 5, 10, 15];
return nums[new Random().Next(4)];

或者如果它真的像 5 的倍数一样简单;简单相乘:

return new Random().Next(4) * 5;
于 2013-06-22T05:49:02.297 回答
1

是的。将四个数字放入由四个元素组成的数组中。然后生成0-3之间的随机数并使用它来索引数组

于 2013-06-22T05:44:31.513 回答
0
  Random r = new Random();
  var a = r.Next(4)*5;
于 2013-06-22T08:33:33.503 回答
0
const int iterator = 5;
const int upperBound = 15;

var possibleValues = (from n in Enumerable.Range(0, upperBound + 1)
                      where n % iterator == 0
                      select n).ToArray(); 

Random r = new Random();
var a = possibleValues[r.Next(possibleValues.Length)];
于 2013-06-22T05:45:19.967 回答
0
public static IEnumerable<int> Range(int count, int start = 0, int step = 1)
{
    for (int i = start; i < count; i++)
        yield return i;
}

var arr = Range(4, 0, 5).ToArray(); // 0, 5, 10, 15.
于 2013-06-22T06:42:31.570 回答