2017-09-25 5 views
1

Je travaille sur un programme de quiz en C# depuis quelques semaines maintenant. J'ai tout à peu travailler comme il se doit, sauf pour un dernier détail. Je veux être en mesure de passer une fois par le quiz, puis utiliser des réponses incorrectes dans un deuxième essai. À la fin des deux tentatives, je veux afficher une note à l'utilisateur. Des idées comment je serais capable de faire ça? Voici un peu de mon code avec lequel je travaille:Comment puis-je stocker des réponses incorrectes dans mon quiz et les repeupler dans une seconde tentative

using System; 

namespace Quiz 
{ 
class MultipleChoiceQuiz 
{ 
    public static void CurrentQuestion(string correctAnswer) 
    { 
     do 
     { 
      string userAnswer = Console.ReadLine(); 
      if (userAnswer != "A" && userAnswer != "B" && userAnswer != "C" && userAnswer != "D") 
      { 
       Console.WriteLine("\nError - Not a Valid Input - Please Enter Valid Input"); 
      } 
      else 
      { 
       if (userAnswer == correctAnswer) 
       { 
        Console.WriteLine("\nThat is correct!"); 
        break; 
       } 
       else if (userAnswer != correctAnswer) 
       { 
        Console.WriteLine("\nSorry, that is incorrect."); 
        break; 
       } 
      } 
     } 
     while (true); 
    } 
    public static void Questions() 
    { 
     Console.WriteLine("Chad Mitchell - ENGR 115 - USAF HC130J Power On Quiz\n"); 
     Console.WriteLine("Please enter your first name: "); 
     string firstName = Console.ReadLine(); 
     Console.WriteLine("\nWelcome to the HC-130J Power-On Quiz " + firstName + ".\n"); 
     Console.WriteLine("Using the keyboard, please submit answers by using the \'ENTER\' key.\n"); 
     Console.WriteLine("Please submit answers in CAPITAL letter form only.\n"); 
     Console.WriteLine("Ready to begin " + firstName + "? Hit the \'ENTER\' key now..."); 
     Console.ReadLine(); 
     Console.Clear(); 

     //Question 1 
     Console.WriteLine("Chad Mitchell - ENGR 115 - USAF HC130J Power On Quiz\n"); 
     Console.WriteLine("Question 1 - What position does the ramp contol knob need to be in? " + 
          "\n\nA. 3N \nB. 1 \nC. 6N \nD. A or C \n\nWhat is your answer " + firstName + "?"); 
     CurrentQuestion("D"); 
     Console.Write("\nPress \'ENTER\' to continue..."); 
     Console.ReadLine(); 
     Console.Clear(); 

     //Question 2 
     Console.WriteLine("Chad Mitchell - ENGR 115 - USAF HC130J Power On Quiz\n"); 
     Console.WriteLine("Question 2 - After power is applied to the aircraft, the battery needs to be turned off? " + 
          "\n\nA. True \nB. False \n\nWhat is your answer " + firstName + "?"); 
     CurrentQuestion("A"); 
     Console.Write("\n"); 
     Console.Write("\nPress \'ENTER\' to continue..."); 
     Console.ReadLine(); 
     Console.Clear(); 

     //Question 3 
     Console.WriteLine("Chad Mitchell - ENGR 115 - USAF HC130J Power On Quiz\n"); 
     Console.WriteLine("Question 3 - Above what temperature does air condition need to be applied to the aircraft while power is applied? " + 
          "\n\nA. 75 degrees Fahrenheit \nB. 100 degrees Fahrenheit \nC. 95 degrees Fahrenheit \nD. 85 degrees Fahrenheit \n\nWhat is your answer " 
          + firstName + "?"); 
     CurrentQuestion("C"); 
     Console.Write("\n"); 
     Console.Write("\nPress \'ENTER\' to continue..."); 
     Console.ReadLine(); 
     Console.Clear(); 

J'ai une classe et deux méthodes. La seule méthode consiste à évaluer les réponses au questionnaire comme bonnes ou mauvaises. L'autre est d'afficher toutes les questions et réponses à l'utilisateur. Toute aide que quelqu'un pourrait me donner serait grandement appréciée.

+0

Créer des variables membres pour stocker les réponses – UnholySheep

Répondre

0

L'idée est de garder une trace des réponses avec une structure appropriée. On pourrait utiliser un dictionnaire, par exemple:

Dictionary <string,string> questionsAndAnswers= new Dictionary <string,string>(); 

où la clé est votre question et la valeur est votre réponse. vous pourriez en outre avoir une structure qui maintient l'exactitude de chaque réponse. par exemple:

public class Answer 
{ 
    public string text {get;set;} 
    public bool isCorrect {get;set;} 
} 

et ont:

Dictionary <string,Answer> questionsAndAnswers= new Dictionary <string,Answer>(); 
+0

Ce fut ma première pensée ... Mais le second regard, il semble que le joueur ne peux pas même donner quoi que ce soit d'autre, alors A, B, C, D: 'si (userAnswer = "A" && userAnswer! = "B" && userAnswer! = "C" && userAnswer! = "D") ' – TheSkimek

0

Vous voulez poser à nouveau les questions que le joueur a répondu incorrect? Pourquoi ne pas simplement ajouter le numéro de la question à une liste, puis reprendre cette liste dans la deuxième tentative.

0

Une approche orientée objet de ce problème inclurait une classe qui représente votre question ainsi qu'une structure de données pour contenir les réponses de votre utilisateur. Pour associer les réponses aux questions, vous aurez besoin d'un identifiant pour chaque question. Le code ci-dessous vous permettra d'étendre cette application avec de nombreuses questions sans copier/coller un bloc de Console.WriteLine s. Bien que cela puisse sembler plus rapide (et pour être honnête, je ne connais pas vos motivations ici), c'est toujours une bonne idée d'envisager l'extensibilité et la maintenance. Une bonne structure orientée objet vous permettra d'en faire plus et d'écrire moins de code.

public class Question 
{ 
    public int Id { get; set; } 

    public string Text { get; set; } 

    public IDictionary<string, string> Answers { get; set; } 

    public string CorrectAnswer { get; set; } 
} 

public static class Program 
{ 
    public static IEnumerable<Question> _questions = new [] 
    { 
     new Question 
     { 
      Id = 1, 
      Text = "What position does the ramp contol knob need to be in?", 
      Answers = new Dictionary<string, string> 
      {, 
       { "A", "3N" }, 
       { "B", "1" }, 
       { "C", "6N" }, 
       { "D", "A or C" } 
      }, 
      CorrectAnswer = "D" 
     } 
    }; 

    public static IDictionary<int, string> _answers = new Dictionary<int, string>(); 

    public static void Main() 
    { 
     Console.WriteLine("Chad Mitchell - ENGR 115 - USAF HC130J Power On Quiz\n"); 
     Console.WriteLine("Please enter your first name: "); 
     string firstName = Console.ReadLine(); 
     Console.WriteLine("\nWelcome to the HC-130J Power-On Quiz " + firstName + ".\n"); 
     Console.WriteLine("Using the keyboard, please submit answers by using the \'ENTER\' key.\n"); 
     Console.WriteLine("Please submit answers in CAPITAL letter form only.\n"); 
     Console.WriteLine("Ready to begin " + firstName + "? Hit the \'ENTER\' key now..."); 
     Console.ReadLine(); 
     Console.Clear(); 

     foreach(var question in _questions) 
     { 
      Console.WriteLine(question.Text); 
      Console.WriteLine(); 
      foreach(var answer in question.Answers) 
      { 
       Console.WriteLine(string.Format("{0}. {1}", answer.Key, answer.Value)); 
      } 
      Console.WriteLine("What is your answer " + firstName + "?"); 
      var response = Console.ReadLine(); 
      while(!question.Answers.ContainsKey(response)) 
      { 
       Console.WriteLine("\nError - Not a Valid Input - Please Enter Valid Input"); 
       response = Console.ReadLine(); 
      } 
      if(response == question.CorrectAnswer) 
      { 
       Console.WriteLine("\nThat is correct!"); 
      } 
      else 
      { 
       Console.WriteLine("\nSorry, that is incorrect."); 
      } 
      _answers[question.Id] = response; 
     } 

     // do whatever you want when the test is over 
    } 
} 

Un peu plus d'explications: nous créons une classe Question qui a un identifiant, un texte (étant posé la question réelle), une collection de réponses qui sont composées d'une clé (A, B, C, D, etc.) et une valeur (le texte réel de la réponse), et une réponse correcte. Nous imprimons des instructions d'installation initiales et uniques sous la forme de demander à l'utilisateur son nom et de lui donner des instructions sur la façon de passer le test.

La vraie valeur ici vient de la possibilité de faire une boucle sur vos objets bien définis. Nous imprimons le test de la question, puis les réponses (formatées de manière à ce que l'utilisateur puisse les comprendre et choisir de manière appropriée), puis demander à l'utilisateur une réponse, déterminer son exactitude et la mémoriser.

Espérons que cela aide!