2016-11-10 4 views
0

Ich versuche eine Methode zu erstellen, die ein Quiz bewertet. Es funktioniert gut, wenn die Quizfrage nur eine richtige Antwort hat, aber ich habe es schwer mit mehreren richtigen Antworten umzugehen.Durch eine Liste blättern und mehreren Bedingungen entsprechen

Zuerst überprüfe ich, wie viele richtige Antworten die aktuelle Frage hat. Wenn es mehr als 1 ist, dann brauche ich eine Methode, die überprüft, ob die Benutzer antworten, ist eine perfekte Übereinstimmung mit den richtigen Antworten.

Also, wenn es eine Frage mit 2 richtigen Antworten gibt, und der Benutzer nur in 1 von ihnen eingecheckt hat, erhält er keine Punktzahl.

Irgendwelche Ideen zu einer Methode zu überprüfen, dass die Anzahl der Antworten, die richtige Antworten sind, die richtigen Antworten entsprechen?

Ich denke, LINQ würde hier gut passen, aber ich bin ein totaler Noob darauf. Vielleicht wäre es eine Lösung, alle richtigen Antworten zu einer neuen Liste hinzuzufügen und sie mit .Contains zu vergleichen.

Die Klassen wie folgt aussehen:

List<Question> 

Question-Class 
- List<Answers> 
    -(string) AnswerText 
    -(bool) CorrectAnswer 

- List<string> UserAnswerToQuestionText 

Pseudo-Code:

if (currentquestion has more than one correct answer) 
if (UserAnswerText == correctAnswerX && UserAnswerText == correctAnswerY) 

nrofCorrectAnswers++; 

Antwort

0

Können Sie zeigen Sie Ihren Code für eine bessere Antwort?

denke ich, es so etwas wie dies sein könnte:

int correctAnswersCount = yourlist.Count(answer => answer.Contais(UserAnswerText)); 
1

Sollte dies zu tun in der Lage mit Linq

Also das darauf an, wie Sie Ihre Fragen und Antworten modellieren.

eine Klasse für Ihre Frage Stellen und dann eine Klasse für Ihre Antwort so etwas wie dies machen, könnte Ihre Frage Klasse eine Liste von Antworten enthalten:

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;} 
} 

So haben Sie eine Beziehung zwischen Frage und Antwort. Dann Ihre Antworten gegen die Antwort zu überprüfen gegeben wie folgt vorgehen:

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 
    { 
} 

Diese Fragen feste Antworten übernimmt (dh Multiple Choice), wenn sie in der Antwort eingegeben haben es sein könnte komplizierter

+0

Vielen Dank für Ihre Antwort . Das ist definitiv ein Schritt nach vorne! :-) Obwohl meine Klasse sieht so aus, so ist die Benutzer Antworten in einer Liste von Zeichenfolgen, können Sie sie noch so mit linq iterieren? –

+0

Ja, Sie können nur die ID für den Text ändern. Sie müssen einige Formatierungen und Überprüfungen vornehmen, da sich die Zeichenfolgen ändern. –

Verwandte Themen