2011-12-23 3 views
0

Мой код получает список слов из txt-файла и выбирает слова случайным образом. Однако одно и то же слово может появляться более одного раза, и мне нужно знать, как остановить это?Как изменить мой код на работу определенное количество раз?

Вот код:

Dim aryName As String() = Nothing 
aryName = File.ReadAllLines(Application.StartupPath & "\Random\fnames.txt") 

Dim randomWords As New List(Of String) 
For i = 0 To aryName.Length - 1 
If randomWords.Contains(aryName(i)) = False Then 
    randomWords.Add(aryName(i)) 
End If 
Next 

Dim random As New Random 
Label2.Text = (randomWords(random.Next(0, randomWords.Count - 1)).ToString) 

Может быть, это могло бы работать, хотя это на английском языке, а не код :(

if label1.text is changed then 
    Get label1.text 
    if label.text becomes this word again then 
    run the random code 
    end if 
end if 
+2

Вы имеете в виду, что в списке ввода есть дубликаты или что одно и то же слово выбрано несколько раз? – ChrisF

+0

Итак, случайные слова появляются в aryName несколько раз? – Aaron

+0

Вы хотите метод тасования? – Cobold

ответ

1

Это должно предотвратить непосредственные повторы:

Dim random As New Random 

'Just create a temporary holder for comparison 
Dim word As String = Label2.Text 

'Run a while loop that works as long as there 
'is no change to the word. This should prevent 
'back to back repeats. 
While word = Label2.Text 
    word = (randomWords(random.Next(0, randomWords.Count - 1)).ToString) 
End While 

Label2.Text = word 

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

Dim random As New Random 
Label2.Text = (randomWords(random.Next(0, randomWords.Count - 1)).ToString) 
randomWords.Remove(Label2.Text) 
+0

эти дон- t, похоже, работает, когда я вставляю их в – user1081679

+0

@ user1081679: Я ожидал бы, что вы относитесь к этому скорее как псевдокод. Может потребоваться небольшая модификация, основанная на том, как работает ваш код. Какой из них не делает то, что вы хотите, и что именно вы хотите сделать? –

0

Изменить ваш цикл, чтобы предотвратить простофили в aryName от попадания в randomWords:

For i = 0 To aryName.Length - 1 
    If randomWords.Contains(aryName(i)) = False Then 
     randomWords.Add(aryName(i)) 
    End If 
Next 
+0

Эти, похоже, не работают, когда я вставляю их в – user1081679

+0

Вызывает ли это какая-то ошибка? В основном все это делается, чтобы проверить, существует ли значение массива в randomWords и добавляет его только в том случае, если оно не существует. – Aaron

1

Вы можете а) удалить выбранное слово из списка, или б) вы можете случайным образом сортировать список первым , Опция a) уже обращена в другом ответе Вариант b) позволяет сохранить все слова в памяти. Вот код:

Dim randomWords As New List(Of String)(File.ReadAllLines(Application.StartupPath & "\Random\fnames.txt")) 

    Dim random As New Random 

    randomWords.Sort(Function(s1 As String, s2 As String) random.Next(-1, 1)) 

    For index As Integer = 0 To randomWords.Count - 1 
     Label2.Text = randomWords(index) 
    Next 
+0

они не работают, когда я вставляю их. – user1081679

+0

Вам нужно сохранить все случайные слова в форме, а также индекс последнего используемого слова. Когда запрашивается новое слово, увеличьте индекс и вытащите слово из списка. Чтение из файла должно происходить один раз. Я знаю, что это работает, потому что я попробовал. – ja72

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