2017-02-11 19 views
-1

Ich mache ein Quizspiel und ich versuche, die beste Struktur zu finden, um damit umzugehen.Verschachtelte Listen oder eine andere Struktur? C#

10 oder mehr Fragen, jedes wird mehrere Antworten haben, alle falsch, aber eins.

Der Benutzer wählt aus vier sichtbaren Antworten (Radiobuttons) die richtige aus der Liste aus. Es wird sichergestellt, dass immer die richtige Antwort gefunden wird.

Die Liste wird innerhalb mehrerer Teillisten hat (jeweils eine Frage und mehr Antworten)

In diesen Unterlisten die erste Position [0] wird die Frage sein, die ganzen Rest [1 ... ] werden die Antworten sein.

Meine Frage ist, verschachtelte Listen sind die richtige Art, dies zu tun? Denke ich das richtig?

Vielen Dank im Voraus!

+0

Was ist mit einer 'Liste ', wo 'Question' ist eine Klasse, die Sie die Antworten haben, definiert (* ist so etwas wie' .A', '.B',' .C' und '. D *) wenn es immer 4 Antworten geben wird. Ansonsten, wenn die Antworten keine feste Menge sind, kann es eine Liste/Array von Antworten haben. Hinweis: SO ist für Programmierprobleme/Fragen, bei denen etwas mit dem Code nicht stimmt oder nach bestimmten Funktionen fragt, nach funktionierendem Code und Vorschlägen, wie man es am besten auscheckt. [CodeReview] (http://codereview.stackexchange.com/). –

Antwort

1

Für verbindliche Zwecke und etc., empfehle ich, eine Liste von benutzerdefinierten Klassen zu verwenden; wie zum Beispiel:

var questionList = new List<QandA>(); 

///... 

public class QandA 
{ 
    public string Question { get; set; } 
    public string Answer1 { get; set; } 
    public string Answer2 { get; set; } 
    public string Answer3 { get; set; } 
    public string Answer4 { get; set; } 
    internal int CorrectIndex { get; set; } 
} 
1

Ich würde wahrscheinlich eine Klasse machen.

public class Question { 
    public string TheQuestion; 
    public string[] TheAnswers; //first should be correct answer 
    public Question(string quest, string[] ans){ 
     TheQuestion = quest; 
     TheAnswers = ans; 
    } 
} 

Dann könnten Sie eine List<Question> Questions aller Fragen machen Sie von ihnen mögen und ziehen. Bei der Einrichtung der Antworten sollte immer der erste Array-Wert die richtige Antwort sein und Sie könnten dann die Reihenfolge per Zufall ändern, um die Antworten anzuzeigen.

List<Question> Questions = new List<Question>(); 
string q = "Is stackoverflow the best?"; 
string[] a = new string {"Yes!", "No.", "Probably Not" }; 
Question q1 = new Question(q, a); 
Questions.Add(q1); 
0

Eine „Liste der Listen“ funktionieren kann, aber kann sehr einschränkend sein. Sie hätten nicht viele Möglichkeiten, die Logik Ihres Programms zu organisieren.

Stattdessen sollten Sie wahrscheinlich Klassen erstellen, um die "Dinge" in Ihrem Modell darzustellen. Suchen Sie nach den wichtigen Nomen: Quiz, Frage und Antwort.

class Quiz { 
    List<Question> mQuestions = new List<Question>(); 

    // implement functionality that is relevant at the Quiz level 
} 

class Question { 
    string mQuestionText; 
    List<Answer> mAnswers = new List<Answer>();  

    // implement functionality that is relevant at the Question level 
} 

class Answer { 
    string mAnswerText; 
    bool mIsCorrect; 

    // implement functionality that is relevant at the Answer level 
} 
1

Es gibt einige gute Antworten hier, jedoch würde ich gerne Dinge ein bisschen anders organisieren. Anstatt Antwort zu geben, 1 immer das Richtige. Sie können es so einrichten, wie ich es unten getan habe, um ein bisschen mehr Flexibilität bei der Randomisierung der Mehrfachauswahl zu bieten und es einfacher zu vergleichen, wenn die Antwort richtig war.

// core class 
    public static class Quiz 
    { 
     private static Random rnd = new Random(); 
     public static Question[] Questions = new[] 
     { 
      new Question 
      { 
       QuestionText = "Sample uestion 1?", 
       CorrectAnswer = "Answer to question 1", 
       WrongAnswers = new [] { 
        "Wrong answer 1", 
        "Wrong answer 2", 
        "Wrong answer 3", 
        "Wrong answer 4", 
        "Wrong answer 5", 
       } 
      }, 
      new Question 
      { 
       QuestionText = "Sample uestion 2?", 
       CorrectAnswer = "Answer to question 2", 
       WrongAnswers = new [] { 
        "Wrong answer 1", 
        "Wrong answer 2", 
        "Wrong answer 3", 
        "Wrong answer 4", 
        "Wrong answer 5", 
       } 
      } 
     }; 

     public class Question 
     { 
      public string QuestionText { get; set; } 
      public string CorrectAnswer { get; set; } 
      public string[] WrongAnswers { get; set; } 

      public string[] GetMultipleChoice(int numberOfChoices) 
      { 
       var list = new List<string>() { CorrectAnswer }; 
       list.AddRange(WrongAnswers.Take(numberOfChoices - 1)); 

       // shuffle 
       int n = list.Count; 
       while (n > 1) 
       { 
        n--; 
        int k = rnd.Next(n + 1); 
        var value = list[k]; 
        list[k] = list[n]; 
        list[n] = value; 
       } 

       return list.ToArray(); 
      } 
     } 
    } 

    // console application 
    static void Main(string[] args) 
    { 
     foreach (var question in Quiz.Questions) 
     { 
      // write question 
      Console.WriteLine(question.QuestionText); 
      Console.WriteLine(string.Join(Environment.NewLine, question.GetMultipleChoice(4))); 

      var response = Console.ReadLine(); 

      if (response.Equals(question.CorrectAnswer, StringComparison.InvariantCultureIgnoreCase)) 
      { 
       Console.WriteLine("Correct!"); 
      } 
      else 
      { 
       Console.WriteLine("Wrong"); 
      } 
     } 
    } 
Verwandte Themen