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

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

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.

You Might Also Like