2017-09-25 13 views
1

私は数週間、C#のクイズプログラムに取り組んでいます。私は最後の細部を除いてはすごくうまく働いています。私はクイズを一度通過して、2回目の試行で間違った回答を使用したいと考えています。両方の試行の終わりに、私はユーザーにグレードを表示したい。どのように私はこれを行うことができるだろう任意のアイデア?ここでは、私が作業している私のコードのビットです:私のクイズで間違った回答を保存し、2回目にそれらを再現する方法

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(); 

私は1つのクラスと2つの方法があります。 1つの方法は、クイズ内の回答を正しいかどうか評価することです。もう1つは、すべての質問と回答をユーザーに表示することです。誰かが私に与えることができるどんな助けも大いに感謝されるでしょう。

+0

の答えに私が最初に考えた – UnholySheep

答えて

0

アイデアは、適切な構造で回答を追跡することです。

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

ここで、キーはあなたの質問です。答えはあなたの答えです。それぞれの答えの正確さを保持する構造を持つことができます。例えば:

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

とあります

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

を格納するためのメンバ変数を作成します...しかし、第二の外観上では、プレイヤーのカントのように思えるとしてもA、B、C、D、次に何かを与える: 'userAnswer(IF =! "A" && userAnswer!= "B" && userAnswer!= "C" && userAnswer!= "D") ' – TheSkimek

0

だから、プレイヤーが間違った答えという再質問をしたいですか? 質問番号をリストに追加して、2回目の試行で再びそのリストに戻すのはなぜですか?

0

この問題に対するオブジェクト指向のアプローチには、質問を表すクラスとユーザーの回答を保持するデータ構造が含まれます。質問に回答を関連付けるには、各質問の識別子が必要です。以下のコードは、Console.WriteLineのブロックをコピー/ペーストすることなく、このアプリケーションを多くの質問で拡張することを可能にします。それはより速く見えるかもしれませんが(私はここであなたの動機を知らないので公正であるかもしれませんが)、拡張性とメンテナンスを考慮することは常に良い考えです。良いオブジェクト指向の構造は、より多くのことを行い、より少ないコードを書けるようにします。

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

もう少し説明:私たちは、識別子を持っているQuestionクラス、いくつかのテキスト(実際の質問がされている)、キー(A、B、C、から構成されている回答のコレクションを作成しますDなど)と値(実際のテキストの答え)と正解との間の関係を示す。ユーザーに名前を尋ね、テストの受け方についていくつかのプロンプトを出すという形で、いくつかの初期設定をプリントアウトしています。

実際の値は、明確に定義されたオブジェクトをループする機能です。私たちは質問テストを印刷し、回答(ユーザーが理解して適切に選択できるようにフォーマットされています)を入力してから、ユーザーに回答を求め、正しいかどうかを判断して保存します。

希望すると便利です。

関連する問題