2016-11-10 5 views
0

クイズを評価するメソッドを作成しようとしています。クイズ質問には正解が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

あなたは良い答えのためのあなたのコードを表示することができますか?

は、私はこのようなものかもしれないと思う:

int correctAnswersCount = yourlist.Count(answer => answer.Contais(UserAnswerText)); 
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;} 
} 

は、だから、質問と答えの関係を持っています。彼らはそれが

+0

よりトリッキーなお返事ありがとうございかもしれない答えに入力した場合、これは質問のために一定の答えを想定している(つまり、複数選択)

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

:次に、これを行う与えられた答えに対して、あなたの答えをチェックします。これは間違いなく前進です! :-) 私のクラスはこのように見えるので、ユーザーの回答は文字列のリストにありますが、それでもlinqを使ってそのように繰り返すことはできますか? –

+0

はい、テキストのIDだけを変更できます。文字列が変更されるので、いくつかの書式設定と検証が必要になります。 –

関連する問題