2014-03-03 19 views
3

我正在爲我的計算機科學課進行測驗,基本概念是您有15個關鍵字和15個定義。所有需要隨機顯示,並出現正確的答案。用戶必須將正確的定義與關鍵字匹配兩次,然後該關鍵字和定義纔會再次顯示。當所有人都回答了兩次測驗結束後。如何建立這個列表並隨機化它?

我已將我的關鍵字和我的定義存儲在同一個文件中,以免它們不同步。該文本文件看起來像這樣:

Keyword1 = Definition1 
Keyword2 = Definition2 
Keyword3 = Definition3 

等(15總)

我的主要形式如下:

Public Class quiz 
Private Sub quiz_load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles myBase.Load 

Dim MyList As List(Of KeyValuePair(Of String, String)) = New List(Of String, String)) 
For Each line As String In System.IO.File.ReadAllLines("my-file-path") 
    Dim Pair() As String = line.split("=") 
    mylist.add(New KeyValuePair(Of String, String)(Pair(0), Pair(1))) 
Next 

我顯示在標籤和定義隨機關鍵字以單選按鈕。兩個必須是隨機定義,一個必須是所示關鍵字的正確定義,這也需要隨機顯示。

我所問的是:

  1. 我如何完成此列表關閉,因爲它覆蓋其他15個行使用最後一個?
  2. 如何隨機顯示關鍵字和定義的列表?
  3. 如何將每個關鍵字與其定義兩次匹配時刪除項目? E.G:關鍵字1和定義1已被正確回答兩次,因此從列表中刪除,因此不會再次顯示。
+0

請編輯您的問題標題以解釋有關問題的內容。 「我在做這個名單有什麼問題?」作爲搜索結果對未來的讀者來說不會有太大的意義。謝謝。 –

+1

你是這個班級的導師還是其中的一名學生?此外,這一行讓我覺得奇怪'Dim MyList As List(KeyValuePair(Of String,String))=新列表(字符串,字符串))'。 –

+0

學生,我不知道它究竟有什麼問題,或者我不會將標題設置得太模糊。 –

回答

1

這應該給你一個想法:

Const NUMBER_OF_ANSWERS As Integer = 3 

Dim kv As New Dictionary(Of String, String) 
kv.Add("Keyword1", "Definition1") 
kv.Add("Keyword2", "Definition2") 
kv.Add("Keyword3", "Definition3") 

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" 
Next 

的代碼是非常不言自明,如果您有任何疑問,請讓我知道在評論中。

編輯:以下是如何從文件填充字典。

'assuming file structure is like this: 
'keyword1,definition1 
'keyword2,definition2 
'keyword3,definition3 
'... 
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 
+1

我需要兩個文件中的關鍵字和定義嗎? EG'公共關鍵字作爲字符串()= IO.File.ReadAllLines(「我的文件路徑」)''和公共定義作爲字符串()= IO.File.ReadAllLines(「my-file-path-to-defs」 )'。然後當我去添加時,我會使用:'kv.add(關鍵字(0),定義(0))'等等? –

+0

@MattKent:你可以有一個文件,逗號,空格或製表符分隔,鍵+值。不,你應該遍歷所有行並動態地創建一個列表或字典,而不是硬編碼'0,0'; '1,1'等順便說一句,上面的代碼有問題 - 它會顯示儘可能多的答案,因爲有問題 - 我正在努力解決它。 – Neolisk

+0

@MattKent:現在代碼已修復,您可以通過在代碼開始處定義的常量值來控制答案的數量。您可以在測試之前或在應用程序配置('app.config'文件)中指定動態參數。 – Neolisk

0

確定加載問題後,您可以按照此基本算法完成其餘任務。我不想給你一個班級任務的確切代碼。把這種事情弄清楚是學習編程的樂趣之一。

  • 循環遍歷每個問題,並保留當前 問題的索引。
  • 聲明新的答案列表,並將當前問題的正確答案 放入列表中。
  • 挑選3個以上的答案 這不是正確的答案,並且答案要比挑選此問題的 並將它們添加到答案列表中。
  • 隨機化答案列表。
  • 顯示問題和答案
  • 檢查所選答案與當前問題的答案。
  • 重複每個問題。