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 

それをもう一度繰り返さないようにするには、おそらく、randomWordsリストから使用された単語を削除する必要があります。

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

これらは、 – user1081679

+0

@ user1081679で貼り付けるとうまくいきません:これはもっと擬似コードのように扱うと思います。コードが実際にどのように動作するかに基づいてわずかな変更が必要になることがあります。あなたがしたいことをやっていない人はどれですか?あなたは何をしたいのですか? –

0

randomWordsに入るからaryNameでdupesを防ぐために、ループのために、あなたを変更します。

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)あなたが最初のリストランダム並べ替えをすることができます。 オプション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

最後の単語のインデックスと同様に、フォームにすべてのランダムな単語を保存する必要があります。新しい単語が要求されると、索引を増分して単語をリストから引き出します。ファイルからの読み込みは1回発生する必要があります。私はそれを試したので、私はこの作品を知っています。 – ja72