首页 > 解决方案 > 在我的学校课程的测验中使用 C# 随机化问题

问题描述

嗨,所以每当我尝试从文本文件中提取问题时,我在随机化多个问题时遇到了一些麻烦。

 Random Num = new Random();
 int Qnumber = Num.Next(QandAClass1.Questions.Count);

 label8.Text = QandAClass1.Questions.Count.ToString();

 // counts items in the list and selects random number from it 
 label1.Text = QandAClass1.Questions[Qnumber];

 ///////////////////////////////////////////////////////
 Answer = QandAClass1.Answers[Qnumber];

 label2.Text = Answer; // Stores ans for selected question 
 ///////////////////////////////////////////////////////
 QandAClass1.Questions.RemoveAt(Qnumber);
 QandAClass1.Answers.RemoveAt(Qnumber);

 label8.Text = QandAClass1.Questions.Count.ToString();

这是我目前拥有的代码,效果很好,但仅适用于一个问题。但是我一次在屏幕上有五个问题,我需要它们都是随机的。它们只是 Windows 窗体上的标签。任何帮助或指针将不胜感激。谢谢 :) 此表格上的 PS 标签 8 只是让我检查所有正确数量的问题。此外,我的标签 2 只是检查答案是否与问题匹配。

标签: c#

解决方案


我建议这种方法。让基本流程正常工作。这是我经常用于随机化项目的方法

  1. 如果可能,请使用包含问题和答案的类(如已建议的那样)
  2. 创建这些问题和答案的列表
  3. 显示问题和答案列表

一旦你对它的工作感到满意,你的最后一项工作就是随机排列一个列表。从您的主要问题和答案列表开始,同时创建一个新的空显示列表。

从您的主列表中随机抽取一个问题和答案并将其添加到您的显示列表中。现在显示列表中有一项,主列表中少了一项。重复此方法,直到您有尽可能多的(随机)显示项目或主列表为空。

每次从主列表中删除一个项目时,随机数的索引范围就会减少一。

Random rnd = new Random();
...
int randomIndex = rnd.Next(0, qaList.Count-1);

推荐阅读