2016-12-19 2 views
0

все, что я делаю в университете, и я пытаюсь найти решение определенной проблемы. У меня есть окно, которое генерирует случайное число при запуске, а также последовательность (при нажатии кнопки). Проблема заключается в том, что во время последовательности отображаются те же самые 5 номеров, пока отображается 5 разностных чисел. Они генерируются беспорядочно точно так же, как и одиночное число.Не отображать случайные числа

 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(); 
    } 
    } 
    } 

ответ

1

См. Связанные ответы для получения более подробной информации.

Изменение:

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(); 
} 

Кроме того, имейте в виду, что "Макс" будет не быть включены в возможные возвращаемые значения. Для этого вам понадобятся:

return rnd.Next(min, max + 1).ToString(); 
Смежные вопросы