我基本上试着写一个测验作为我的计算机编程课程的一部分,我遇到了一个麻烦的地方.
我希望从随机池中选择问题以阻止作弊,我可以使它在1,8的数字之间随机选择,但这可能导致在提问中重复,这是我不想要的.
Random random = new Random(); // We use this random object to choose random icons for the squares.
List<int> Assignments = new List<int>()
{
1,2,3,4,5,6,7,8
};
Random RandomlyChooseNumbers = new Random();
int AssignmentForQ1;
int AssignmentForQ2;
int AssignmentForQ3;
int AssignmentForQ4;
string CorrectAnswerA1;
string CorrectAnswerA2;
string CorrectAnswerA3;
string CorrectAnswerA4;
public double timePassed;
public int calculatedScore;
public int timeLeft;
public frmQuizOneHardMode()
{
InitializeComponent();
AssignQuestionToTextQ1();
}
private void AssignQuestionToTextQ1()
{
int randomNumber = RandomlyChooseNumbers.Next(Assignments.Count);
AssignmentForQ1 = Assignments[randomNumber];
Assignments.RemoveAt(randomNumber);
AssignmentForQ2 = Assignments[randomNumber];
Assignments.RemoveAt(randomNumber);
AssignmentForQ3 = Assignments[randomNumber];
Assignments.RemoveAt(randomNumber);
AssignmentForQ4 = Assignments[randomNumber];
Assignments.RemoveAt(randomNumber);
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,数字总是相同的,这意味着AssignmentForQ1,Q2,Q3和Q4都显示完全相同的问题,我真的不知道这里出了什么问题,有人可以帮忙吗?
编辑:我个人要感谢Jamiec,伙伴,你是一个完整的救生员,没有你我不可能做到这一点,谢谢!
你在那里的一半.一般的想法是选择一个随机数,然后删除该元素,以便不能重新选择.但是,您需要在每次尝试后从简化集中选择一个新的随机数,以便所有元素都是随机的.
int randomNumber1 = RandomlyChooseNumbers.Next(Assignments.Count);
AssignmentForQ1 = Assignments[randomNumber1];
Assignments.RemoveAt(randomNumber1);
// set is reduced
int randomNumber2 = RandomlyChooseNumbers.Next(Assignments.Count);
AssignmentForQ2 = Assignments[randomNumber2];
Assignments.RemoveAt(randomNumber2);
Run Code Online (Sandbox Code Playgroud)
这可以通过为您的赋值和循环使用数组来简化
int[] Questions = new int[4];
for(var i=0;i<Questions.Length;i++)
{
int randomNumber = RandomlyChooseNumbers.Next(Assignments.Count);
Questions[i] = Assignments[randomNumber];
Assignments.removeAt(randomNumber);
}
Run Code Online (Sandbox Code Playgroud)