2014-03-03 50 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这就是你要求的,它有助于你在正确的方向