2016-12-06 15 views
1

配列の3文字の単語からなるリストの内容を印刷しようとしています。コードは機能しますが、リストを複数回印刷します。理由は不明です。誰も助けることができますか?私は周波数分析を使用して復号化ソフトウェアを構築しています。このステップは私の先生によれば重要な部分です。私はVisual StudioでWindowsフォームアプリケーションを使用しています。以下はそのコードとその結果です。分割配列から取ったリストから3文字の単語を印刷する方法VB

プライベートサブthreeLetterWordButton_Click(オブジェクト、EventArgsのようEのような送信者は)あなたは3つのループを必要としないthreeLetterWordButton.Click

freqTextBox.Show() 

    Dim threeWordList As New List(Of String) 
    Dim encryptedText As String = encryptionInput.Text 
    Dim encryptedArrary() As String = Split(encryptedText) 

    For Each item In encryptedArrary 

     For i = 0 To encryptedArrary.GetUpperBound(0) 

      If encryptedArrary(i).Length = 3 Then 

       threeWordList.Add(encryptedArrary(i)) 

       For Each j In threeWordList 

        freqTextBox.Text = freqTextBox.Text & j & " " 

       Next 

      End If 

     Next 

    Next 

End Sub 

エンドクラス

Here is the result of the code

答えて

2

を処理します。このコードは、1つでそれを行います。

For Each item In encryptedArrary 
     If item.Length = 3 Then 
      threeWordList.Add(item) 
      freqTextBox.Text = freqTextBox.Text & item & " " 
     End If 
Next 
+0

ありがとうございます!それはあなたが私をそこに保存した作品です:) – Lauren

+1

@Laurenあなたはこのサブの 'threeWordList'にアクセスしません、あなたは実際にそれを必要としますか? –

+0

@ProGrammerああ、私はこのサブで私はそれが必要ではないことを認識していませんでしたが、後でコードでそれを指摘する必要がありますが、それを指摘してくれてありがとう:) – Lauren

2

前の回答を拡張すると、あなたはこのように、直接ループ宣言の中に長さをチェックするコードを減らすことができる:

For Each item In encryptedArrary.Where(Function(x) x.Length = 3) 
     threeWordList.Add(item) 
     freqTextBox.Text = freqTextBox.Text & item & " " 
    Next 

そのように、あなたが抽出します以前はループ長さの3倍のアイテムが繰り返しの回数を減らします

+0

うわーそれは本当に効率的です、ありがとう! !私はそれを – Lauren

関連する問題