Generate and store 7 random numbers in a array
Andrew Henderson
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