2011-12-23 57 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 2011-12-23 16:27:09

+0

那么,随机单词多次出现在aryName中? – Aaron 2011-12-23 16:27:32

+0

你想要一个洗牌方法吗? – Cobold 2011-12-23 16:28:56

回答

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

这些唐'当我将它们粘贴到 – user1081679 2011-12-23 18:20:50

+0

@ user1081679时,我似乎可以正常工作:我希望你能更像伪代码一样对待它。根据代码的实际运行情况,可能需要稍作修改。哪一个没有做你想做的事,你究竟想要做什么? – 2011-12-23 19:57:44

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 2011-12-23 18:21:05

+0

它是否会抛出某种错误?基本上所有这些都是检查数组值是否已经存在于randomWords中,并且只有在不存在时才添加它。 – Aaron 2011-12-25 04:04:55

1

可以一)从列表中删除所选的词,或者b)你可以随机排序列表第一。 选项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 2011-12-23 18:20:55

+0

你需要存储所有的随机单词到窗体,以及最后使用的单词的索引。当请求新单词时,增加索引并从列表中拉出单词。从文件读取应该发生一次。我知道这是有效的,因为我试过了。 – ja72 2011-12-24 04:18:52