Generate and Store 7 Random Numbers in a Array

I made a program to generate 7 random numbers for a lottery using a array. I have generated a random number between 1, 50 but every number shows in order and not on the same line. I would also like to store the auto generated numbers in a array to use. I am not sure how to fix this any help would be appreciated

static void AutoGenrateNumbers()
{
    int temp;
    int number = 0;
    int[] lotto = new int[7];

    Random rand = new Random();

    for (int i = 0; i <= 50; i++)
    {
        number = 0;
        temp = rand.Next(1, 50);

        while (number <= i)
        {
            if (temp == number)
            {
                number = 0;
                temp = rand.Next(1, 50);
            }
            else
            {
                number++;
            }
        }

        temp = number;
        Console.WriteLine($"the new lotto winning numbers are:{number}Bonus:{number}");
    }
}
3

3 Answers

Is this what you need?

static void AutoGenrateNumbers()
{
    int temp;
    int[] lotto = new int[7];

    Random rand = new Random();

    for (int i = 0; i < 7; i++)
    {
        temp = rand.Next(1, 50);
        lotto[i]= temp;
    }
    Console.Write($"the new lotto winning numbers are: ");

    for (int i = 0; i < 6; i++)
    {
        Console.Write(lotto[i]+" ");
    }
    Console.Write($"Bonus:{lotto[6]}");

}

edit: if you want the numbers to be unique:

static void AutoGenrateNumbers()
{
    int temp;
    int[] lotto = new int[7];

    Random rand = new Random();

    for (int i = 0; i < 7; i++)
    {
        do
        {
            temp = rand.Next(1, 50);
        }
        while (lotto.Contains(temp));
        lotto[i]= temp;
    }

    Console.Write($"the new lotto winning numbers are: ");
    for (int i = 0; i < 6; i++)
    {
        Console.Write(lotto[i]+" ");
    }
    Console.Write($"Bonus:{lotto[6]}");

}
1

A better way to do this is just to generate all the numbers 1-50, shuffle them and then just take 7. Using Jon Skeet's Shuffle extension method found here:

public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source, Random rng)
{
    T[] elements = source.ToArray();
    for (int i = elements.Length - 1; i >= 0; i--)
    {
        int swapIndex = rng.Next(i + 1);
        yield return elements[swapIndex];
        elements[swapIndex] = elements[i];
    }
}

Now your code is very simple:

static void AutoGenrateNumbers()
{
    var lotto = Enumerable.Range(0, 50).Shuffle(new Random()).Take(7);
    Console.WriteLine("the new lotto winning numbers are: {0}", string.Join(",", lotto));
}

Fiddle here

Just to add to the existing answers tried to do that in one LINQ statement:

static void Main(string[] args)
{
    var rand = new Random();
    Enumerable
        .Range(1, 7)
        .Aggregate(new List<int>(), (x, y) =>
        {
            var num = rand.Next(1, 51);
            while (x.Contains(num))
            {
                num = rand.Next(1, 51);
            }
            x.Add(num);
            return x;
        })
        .ForEach(x => Console.Write($"{x} "));
}

The result is something like:

34 24 46 27 11 17 2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Alexander Ross

Alexander Ross

Gaming, Esports & Interactive Media Writer

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.

Share this article
Twitter Facebook Pinterest