如何在给定范围之间生成随机数字序列

时间:2016-03-09 18:08:39

标签: c# winforms

所以我试图制作战舰游戏,在开始时产生随机的船只位置。我使用整数数组来跟踪船只的位置。我希望生成一个随机的数字序列,并给出多少数字的参数。说我想要4个数字,这些数字都是1,2,3,4,但我也可以随机获得55,56,57,58?有任何想法吗? 4个数字代表航空母舰,3个驱逐舰等等。

2 个答案:

答案 0 :(得分:1)

正如其他人所指出的那样,这对于可以将船只放置在不同方向的战列舰实际上没有多大帮助,但是为了回答你问的问题,只需生成一个随机数然后增加。

private static Random _random = new Random();

private static IEnumerable<int> GetSequence(int size, int max)
{
    var start = _random.Next(max - (size - 1));

    for (var i = 0; i < size; i++)
    {
        yield return start + i;
    }
}

编辑:正如@EricLippert所提到的,这可以缩短为:

private static Random _random = new Random();

private static IEnumerable<int> GetSequence(int size, int max)
{
    return Enumerable.Range(_random.Next(max-(size-1)), size);
}

答案 1 :(得分:0)

private static Random rand = new Random();

static void Main(string[] args)
{
    int[] numbers = RandomNumbers(4, 1, 100);

    Console.WriteLine(string.Join(",",numbers));
    Console.Read();
}

public static int[] RandomNumbers(int numberOfResults, int minValue, int maxValue)
{
    // declare array for return values
    int[] result = new int[numberOfResults];

    // get next value from random passing in the min and max ranges
    int start = rand.Next(minValue, maxValue);

    // generate the numbers up to the max number of results required
    for (int i = 0; i < numberOfResults; i++)
    {
        result[i] = start++;
    }

    return result;
}