2012-01-13 2 views
1

В моем коде мы видим, что я вытаскиваю случайную строку из ListBox с помощью random.Next. Проблема в том, что если я хочу проверить ту же строку для числа символов, я использую новое случайное число, которое вызывает некоторые проблемы.Как получить одно и то же случайное число дважды?

Как я могу использовать первое случайное число, которое будет использоваться в моей инструкции IF?

SendKeys.Send(lbMessage.Items[random.Next(lbMessage.Items.Count)]. 
    ToString().Substring(currentChar++, 1)); 

if (currentChar == lbMessage.Items[random.Next(lbMessage.Items.Count)].ToString().Length) 
{ 
    SendKeys.Send("{enter}"); 
    tmrSpace.Enabled = false; 
    currentChar = 0; 
} 
+5

Если вы знаете, как получить такое же число, это не случайно. – Maheep

ответ

2

Сохранить первое случайное число в локальной переменной и использовать его в дальнейшем, как это:

int ran = random.Next(lbMessage.Items.Count); 
SendKeys.Send(lbMessage.Items[ran].ToString().Substring(currentChar++, 1)); 

if (currentChar == lbMessage.Items[ran].ToString().Length) { 
    SendKeys.Send("{enter}"); 
    tmrSpace.Enabled = false; 
    currentChar = 0; 
} 
+0

Но если переменная вызывается снова, это не случайное изменение? Я пробовал это и, похоже, генерировал новое случайное семя. – NewHelpNeeder

+0

Затем вам нужно сохранить сгенерированное случайное число в другом месте вашего кода, где вы уверены, что он не изменится. –

1

Просто подпереть его до переменной :-)

var rnd = random.Next(lbMessage.Items.Count); 
SendKeys.Send(lbMessage.Items[rnd]. 
    ToString().Substring(currentChar++, 1)); 

if (currentChar == lbMessage.Items[rnd].ToString().Length) 
{ 
    SendKeys.Send("{enter}"); 
    tmrSpace.Enabled = false; 
    currentChar = 0; 
} 
+0

Это, похоже, также создает новый случайный случай. Я пробовал это, но семя, похоже, изменилось. – NewHelpNeeder

+0

Нет, вы должны что-то делать неправильно. 'rnd' будет одинаковым во второй и третьей строках. –

+0

@NewHelpNeeder - это генерирует случайное число один раз (в первой строке) и повторно использует его в ключах отправки и инструкции if. Как вы получаете разные цифры? – RQDQ

0

как о временно хранить случайность?

int randomness = random.Next(lbMessage.Items.Count); 
SendKeys.Send(lbMessage.Items[randomness].ToString().Substring(currentChar++, 1)); 

if (currentChar == lbMessage.Items[randomness].ToString().Length) 
{ 
    SendKeys.Send("{enter}"); 
    tmrSpace.Enabled = false; 
    currentChar = 0; 
} 
0

Это вы что искали?

int index = random.Next(lbMessage.Items.Count); 

string value = lbMessage.Items[index].ToString(); 

SendKeys.Send(value.Substring(currentChar++, 1)); 

if (currentChar == value.Length) 
{ 
    SendKeys.Send("{enter}"); 
    tmrSpace.Enabled = false; 
    currentChar = 0; 
} 
0

Если вы передадите начальное значение конструктору Random(), вы получите одинаковые случайные значения каждый раз.

Random random = new Random(86); // Seed can be any Int32 value 

Это то, что вы пытаетесь достичь? Я бы подумал, что ответ Серджио был тем, что вы ищете, но, похоже, это не так.

Смежные вопросы