Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何更改我的代码以使其工作一定次数?_Vb.net_List_Random - Fatal编程技术网

Vb.net 如何更改我的代码以使其工作一定次数?

Vb.net 如何更改我的代码以使其工作一定次数?,vb.net,list,random,Vb.net,List,Random,我的代码从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

我的代码从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)
    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
也许这可能行得通,尽管它是英文的,而不是代码:(


这应防止立即重复:

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)

修改For循环以防止aryName中的重复项进入随机字:

For i = 0 To aryName.Length - 1
    If randomWords.Contains(aryName(i)) = False Then
        randomWords.Add(aryName(i))
    End If
Next
您可以a)从列表中删除所选单词,或b)首先对列表进行随机排序。 选项a)已在另一个答案中说明 选项b)允许您在内存中保留所有单词。代码如下:

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)
    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

你是说输入列表中有重复项,还是同一个单词被多次选择,aryName中多次出现随机单词?是否使用随机洗牌方法?@ChrisF否列表中没有重复的单词,但相同的单词被多次选择times@BryceAtNetwork23是的,他们are@user1081679:我希望您将其视为伪代码。它可能需要根据代码的实际操作方式进行轻微修改。哪一个不做你想让它做的,你到底想让它做什么?你需要将所有随机单词存储到表单中,以及最后使用的单词的索引中。当请求一个新词时,增加索引并从列表中提取该词。从该文件读取的操作应执行一次。我知道这是有效的,因为我试过了。它会抛出某种错误吗?基本上,所有这些都是检查数组值是否已经存在于随机字中,并且只在不存在时添加它。