waleed-gfx
waleed-gfx

Reputation: 23

Randomizing Numbers without repeating it in C#

I want to randomize 9 numbers so random number in each trail would be different of number in previous attempt... here is my code

            Random num1random = new Random();
        label1.Text = num1random.Next(1, 9).ToString();
        label2.Text = num1random.Next(1, 9).ToString();
        label3.Text = num1random.Next(1, 9).ToString();
        label4.Text = num1random.Next(1, 9).ToString();
        label5.Text = num1random.Next(1, 9).ToString();
        label6.Text = num1random.Next(1, 9).ToString();
        label7.Text = num1random.Next(1, 9).ToString();
        label8.Text = num1random.Next(1, 9).ToString();
        label9.Text = num1random.Next(1, 9).ToString();

Upvotes: 0

Views: 225

Answers (2)

Ufuk Hacıoğulları
Ufuk Hacıoğulları

Reputation: 38508

Random.Next is not guaranteed to return 9 distinct values. You should create the value list, then shuffle it.

Random num1random = new Random();
var numbers = Enumerable.Range(1, 9).OrderBy(item => num1random.Next()).ToList();
label1.Text = numbers[0].ToString();
//other labels

Upvotes: 2

Rik
Rik

Reputation: 29243

You don't really want 9 random numbers, you really want the numbers from 1 to 9 in a random order:

Random r = new Random();
var numbers = Enumerable.Range(1,9) // create a sequence of the integers 1 through 9
    .OrderBy(x => r.Next()) // randomize the order
    .ToArray(); // turn the sequence into an array.

// assign the numbers to the labels
label1.Text = numbers[0];
...
label9.Text = numbers[8];

Upvotes: 2

Related Questions