我正在尝试创建一个对测验进行评分的方法。如果测验问题只有一个正确的答案,它可以正常工作,但我很难处理多个正确的答案。
我首先检查当前问题有多少正确答案。如果它超过1我需要一个检查用户回答的方法是否与正确答案完全匹配。
因此,如果有2个正确答案的问题,并且用户只签入其中1个答案,则他没有得分。
有关检查正确答案的答案数是否与正确答案匹配的方法的任何想法?
我认为LINQ在这里很合适,但我是一个完全的菜鸟。也许将所有正确答案添加到新列表并与.Contains匹配将是一个解决方案?
这些课程如下:
List<Question>
Question-Class
- List<Answers>
-(string) AnswerText
-(bool) CorrectAnswer
- List<string> UserAnswerToQuestionText
伪代码:
if (currentquestion has more than one correct answer)
if (UserAnswerText == correctAnswerX && UserAnswerText == correctAnswerY)
nrofCorrectAnswers++;
答案 0 :(得分:1)
应该可以用linq
来做到这一点所以这取决于你如何建模你的问题和答案。
为你的问题上课,然后为你的答案做一个类,你的问题类可以包含一个答案列表:
public class Question
{
public int QuestionId {get; set;}
public string QuestionText {get; set;}
public List<Answer> Answers {get; set;
}
public class Answer
{
public int AnswerId {get; set;}
public int QuestionId {get; set;}
public string AnswerText {get;set;}
}
所以你在问答之间有关系。然后根据给出的答案检查你的答案:
var userAnswers = new List(Answer);
//populate your useranswers here
foreach(var question in Questions)
{
var answersForQuestion = question.Answers.Select(a=>a.QuestionId == question.Id);
if (userAnswers.FindAll(ua => ua.QuestionId == questionId).Length == question.Answers.Count())
{
//correct amount of answers. check for actual answers
if (userAnswers.Any(ua => question.Answers.Contains(a=>a.Id == ua.Id))
//correct answers made
{
}
如果他们在答案中输入了可能更棘手的问题(即多项选择),则假定答案是固定的
答案 1 :(得分:0)
您能否展示代码以获得更好的答案?
我认为它可能是这样的:
int correctAnswersCount = yourlist.Count(answer => answer.Contais(UserAnswerText));