0

everyone i am doing a course at university and im struggling to find a solution to a certain problem. I have a window that generates a random number when started and also a sequence (when a button is pressed). The problem is during sequence the same 5 numbers are being displayed while it should be 5 difference numbers displayed. They are generated randomly just like the single number

     using System;
     using System.Threading.Tasks;
     using System.Windows.Forms;

      namespace RandomNumbers
     {
        public partial class frmRandomNumberGenerator : Form
{
    private bool generate = true;

    public frmRandomNumberGenerator()
    {
        InitializeComponent();
    }

    private string GenerateNumber(int min, int max)
    {
        return new Random().Next(min, max).ToString();
    }

    private void ToggleControls()
    {
        btnStart.Enabled = !generate;
        tcRandomNumbers.Enabled = !generate;
        txtRangeMin.Enabled = !generate;
        txtRangeMax.Enabled = !generate;
        btnStop.Enabled = generate;
    }

    private async void btnStart_Click(object sender, EventArgs e)
    {
        if(string.IsNullOrEmpty(txtRangeMin.Text) || string.IsNullOrEmpty(txtRangeMax.Text))
        {
            MessageBox.Show("Invalid range!");
            return;
        }

        int min = 0;
        int max = 0;

        bool result = int.TryParse(txtRangeMin.Text, out min);
        if (result) result = int.TryParse(txtRangeMax.Text, out max);
        if (result) result = max > min;

        if (!result)
        {
            MessageBox.Show("Invalid range!");
            return;
        }

        generate = true;
        ToggleControls();

        while (true)
        {
            if (!generate) break;
            if (tcRandomNumbers.SelectedIndex == 0)
            {
                lblSingleResult.Text = GenerateNumber(min, max);
            }
            else
            {
                lblSequenceFirst.Text = GenerateNumber(min, max);
                lblSequenceSecond.Text = GenerateNumber(min, max);
                lblSequenceThird.Text = GenerateNumber(min, max);
                lblSequenceFourth.Text = GenerateNumber(min, max);
                lblSequenceFifth.Text = GenerateNumber(min, max);
            }

            await Task.Delay(TimeSpan.FromSeconds(1));
        }
    }

    private void btnStop_Click(object sender, EventArgs e)
    {
        generate = false;
        ToggleControls();
     }
  }
   }
Paul Rooney
  • 20,879
  • 9
  • 40
  • 61

1 Answers1

1

See the linked answers for more details.

Change:

private string GenerateNumber(int min, int max)
{
    return new Random().Next(min, max).ToString();
}

To:

private Random rnd = new Random();

private string GenerateNumber(int min, int max)
{
    return rnd.Next(min, max).ToString();
}

Also, be aware that "max" will not be included in the possible return values. For that you'd need:

return rnd.Next(min, max + 1).ToString();
Idle_Mind
  • 38,363
  • 3
  • 29
  • 40