2014-03-03 77 views
0

我正在爲我的計算機科學類測驗和基本概念是,你有15個關鍵字和15個定義。所有需要隨機顯示,並出現正確的答案。用戶必須將正確的定義與關鍵字匹配兩次,然後該關鍵字和定義纔會再次顯示。當所有人都回答了兩次測驗結束後。如何從文本文件填充此字典?

我已經存儲了我的兩個關鍵字和我在同一文件中定義,所以他們沒有得到同步的。該文本文件看起來像這樣:

​​

等(總共15行)

目前,我有我的字典手動像這樣創建:

Const NUMBER_OF_ANSWERS As Integer = 3 
Public Class Form1 

Dim kv As New Dictionary(Of String, String) 

    kv.Add("Keyword1", "Definition1") 
    kv.Add("Keyword2", "Definition2") 
    kv.Add("Keyword3", "Definition3") 
    kv.Add("Keyword4", "Definition4") 
    kv.Add("Keyword5", "Definition5") 
    kv.Add("Keyword6", "Definition6") 
    kv.Add("Keyword7", "Definition7") 
    kv.Add("Keyword8", "Definition8") 
    kv.Add("Keyword9", "Definition9") 
    kv.Add("Keyword10", "Definition10") 
    kv.Add("Keyword11", "Definition11") 
    kv.Add("Keyword12", "Definition12") 
    kv.Add("Keyword13", "Definition13") 
    kv.Add("Keyword14", "Definition14") 
    kv.Add("Keyword15", "Definition15") 

    Dim r As New Random 
    Dim kvRandom As List(Of KeyValuePair(Of String, String)) = 
     kv.OrderBy(Function() r.Next).ToList 

    'questions will appear in random order 
    For Each line As KeyValuePair(Of String, String) In kvRandom 
     Dim keyword As String = line.Key 
     Dim correctDefinition As String = line.Value 

     Dim keywords As New List(Of String) 
     keywords.Add(keyword) 
     keywords.AddRange(kv.Keys.Except({keyword}). 
      OrderBy(Function() r.Next).Take(NUMBER_OF_ANSWERS - 1)) 

     Dim definitionsRandom As List(Of String) = 
      keywords.Select(Function(x) kv(x)).OrderBy(Function() r.Next).ToList 

     'TODO: need to write some code here 
     'display keyword and three possible definitions to the user 
     '(out of which one is correct) 
     'answers will also appear in random order 
     'Check answer against value stored in "correctDefinition" 

     LabelKeyword.Text = keyword 
     RadioButtonDef1.Text = definitionsRandom(0) 
     RadioButtonDef2.Text = definitionsRandom(1) 
     RadioButtonDef3.Text = definitionsRandom(2) 
    Next 

End Sub 

我知道填充從字典一個文本我做到以下幾點:

For Each line As String In IO.File.ReadAllLines("keywords_and_definitions.txt") 


Dim parts() As String = line.Split(",") 
    kv.Add(parts(0), parts(1)) 
Next 

但是我不知道如何改變這種代碼成功實現這一點。由於之前的幫助,我被告知要這樣做(通過@Neolisk):

將您的進度變量設置爲14(問題數減1,索引爲零,基於VB.NET)。在第一個問題中,顯示問題#0,當用戶按Next時,增加進度變量。不要忘記計算有效/無效的答案。您可能需要爲用戶存儲完整的答案歷史記錄。如果你需要這個模式的細節,我認爲值得提出一個單獨的問題 - 在那裏提供你需要的功能。

再次我不知道如何去這樣做。上面的代碼可以創造奇蹟,它只是我不知道如何更改代碼來填充從文本文件的字典,而不是我是如何做到了上面,因爲它是我們包括我們的關鍵詞和定義從一個文本文件的要求。

回答

1

也許我不理解你的問題,而只是將兩者混合在一起,應該做的伎倆,沒有?

Const NUMBER_OF_ANSWERS As Integer = 3 
Public Class Form1 

Dim kv As New Dictionary(Of String, String) 

For Each line As String In IO.File.ReadAllLines("keywords_and_definitions.txt") 
    Dim parts() As String = line.Split(",") 
    kv.Add(parts(0), parts(1)) 
Next 

Dim r As New Random 
... 

或者我不理解你的問題?

而且,我給你的暗示,因爲這是家庭作業,該Dim parts() As String可以將您的循環外移動。

Hopw這就是你要求的,它有助於你在正確的方向