2014-09-25 54 views
-3

嘿傢伙即時嘗試工作,我有這個任務。我是編程新手,這是我的第三項任務。任何幫助,將不勝感激。林不知道如果我在正確的軌道上。這是我必須做的:c#隨機操作符和數學問題,做循環

允許用戶輸入數字答案的數學問題並展示他們的平均分。用戶將被允許回答他們選擇的許多數學問題。每次錄入後,我們都會顯示當前的平均分數。 while循環和do循環之間的區別是while循環在運行其代碼塊之前測試條件,其中do循環將執行其代碼塊,然後測試條件。因此,while循環的預測試循環的名稱和do循環的測試後循環的名稱。由於do循環是一個測試後循環,它將始終以最低限度執行一次代碼塊。

這些步驟我試着去遵循:

裏面的代碼的主要方法塊中,我們要創建一個do循環。 do循環的優點是它總是會執行一次。在這個應用程序中,我們將使用該優勢來重複幾個步驟。以下步驟是我們想要重複的:

  1. 清除控制檯顯示窗口。 (這將從越來越雜亂顯示)
  2. 使用隨機對象爲一個數學問題得到/存儲兩個隨機數。
  3. 隨機決定使用哪個數學運算符(+ - * /)並存儲該符號。
  4. 顯示應用程序標題和格式化的數學問題。
  5. 從用戶處獲得答案並將其存儲在變量中(即「輸入」)。
  6. 將變量(輸入)從字符串轉換爲雙精度或整數。
  7. 基於數學符號使用隨機數計算正確答案。
  8. 如果用戶輸入的內容與正確的答案相匹配,請將問題點值添加到累計得分中。
  9. 將問題點值添加到可能的總數中。
  10. 顯示消息,包括可能獲得的積分和平均值(已賺/可能)。
  11. 顯示一條消息,詢問用戶是否想退出或發現新的數學問題。
  12. 暫停顯示並獲取退出或繼續的用戶響應。
using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 

    namespace MathProblems 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       string input; 
       double totalPoints = 0; 
       double userEarnedPoints = 0; 
       double average = 0; 
       int number1 = 0; 
       int number2 = 0; 
       int operators = 0; 
       int answer = 0; 
       double correctAnswer = 0; 
       int mathProblem = 0; 

       do 
       { 
        Console.Clear(); 
        Random number = new Random(); 
        number1 = number.Next(1, 31); 
        number2 = number.Next(1, 31); 
        operators = number.Next(1, 5); // 1 = add, 2 = minus, 3 = multiply, 4 = divide 
        Console.WriteLine("\tMath Problems\n"); 

        switch (operators) 
        { 
         case 1: 
          answer = number1 + number2; 
          break; 
         case 2: 
          answer = number1 - number2; 
          break; 
         case 3: 
          answer = number1 * number2; 
          break; 
         case 4: 
          answer = number1/number2; 
          break; 
         default: 
          break; 


        } 
        //if (operators == 1) 
        //{ 
        // Console.WriteLine("{0} + {1} = ", number1, number2); 

        //} 
        //else if (operators == 2) 
        //{ 
        // Console.WriteLine("{0} - {1} = ", number1, number2); 
        //} 
        //else if (operators == 3) 
        //{ 
        // Console.WriteLine("{0} * {1} = ", number1, number2); 
        //} 
        //else if (operators == 4) 
        //{ 
        // Console.WriteLine("{0}/{1} = ", number1, number2); 
        //} 
        //break; 


       } while (true); 

       Console.ReadLine(); 
+5

那麼,什麼是問題? – 2014-09-25 05:40:50

+0

我會說是的,你在正確的軌道上。 'answer'可能需要是一個'double'來處理分割,例如,7/2. – 2014-09-25 05:44:14

+3

你正在循環中創建一個新的'Random'實例 - 這是一個壞主意。見http://csharpindepth.com/Articles/Chapter12/Random.aspx現在,你確切的問題是什麼?你已經提供了你的任務和迄今爲止所做的工作,但我們需要確切地知道你在問什麼。你卡在哪裏? – 2014-09-25 05:47:30

回答

1

爲了獲取用戶輸入,你需要做的Console.ReadKey()(單個字符)或Console.ReadLine()(由Enter終止字符的字符串)。然後,您可以將此輸入捕獲到變量中,然後對其進行比較以獲取用戶的答案或確定是否要繼續。

您還需要驗證輸入的是一個整數。你可以使用int.TryParse()來做到這一點。如果字符串是一個整數,它將返回true,並將該整數存儲在參數out中。

然後,您可以userAnswer比較實際的答案,看看他們是否是正確的。它也像你需要(當他們得到的答案是正確的)

一種方式做,這將增加總的問題和用戶評分:

{ 
    var rnd = new Random(); 
    var quit = false; 
    var userScore = 0; 
    var totalProblems = 0; 
    var percentCorrect = 0d; 

    while (!quit) 
    { 
     Console.Clear(); 

     var number1 = rnd.Next(1, 31); 
     var number2 = rnd.Next(1, 31); 
     var operation = rnd.Next(1, 5);    
     string operatorString; 
     int answer; 
     totalProblems++; 

     Console.WriteLine("\tMath Problem:"); 
     Console.WriteLine("\t-------------"); 

     switch (operation) 
     { 
      case 1: 
       answer = number1 + number2; 
       operatorString = "+"; 
       break; 
      case 2: 
       answer = number1 - number2; 
       operatorString = "-"; 
       break; 
      case 3: 
       answer = number1 * number2; 
       operatorString = "*"; 
       break; 
      case 4: 
       answer = number1/number2; 
       operatorString = "/"; 
       break; 
      default: 
       answer = 0; 
       operatorString = "?"; 
       break; 
     } 

     Console.WriteLine("\t{0} {1} {2}", number1, operatorString, number2); 

     Console.Write("\nEnter your answer here (round down if necessary): "); 
     var input = Console.ReadLine(); 
     int inputAsInt; 

     while (!int.TryParse(input, out inputAsInt)) 
     { 
      Console.Write("Answer must be an integer. Try again: "); 
      input = Console.ReadLine(); 
     } 

     if (inputAsInt == answer) 
     { 
      Console.WriteLine("Correct!"); 
      userScore++; 
     } 
     else 
     { 
      Console.WriteLine("Sorry, the correct answer was: {0}", answer); 
     } 

     percentCorrect = Math.Round((double)userScore/totalProblems * 100, 2); 

     Console.WriteLine("\nYou have answered {0} of {1} questions correctly, " + 
      "for a total of {2}%.", userScore, totalProblems, percentCorrect); 

     Console.Write("\nPress 'q' to quit, or any other key to continue... "); 
     if (Console.ReadKey().Key == ConsoleKey.Q) quit = true; 
    } 

    var letterGrade = 
     percentCorrect < 60 ? "F" 
     : percentCorrect < 67 ? "D" 
     : percentCorrect < 70 ? "D+" 
     : percentCorrect < 73 ? "C-" 
     : percentCorrect < 77 ? "C" 
     : percentCorrect < 80 ? "C+" 
     : percentCorrect < 83 ? "B-" 
     : percentCorrect < 87 ? "B" 
     : percentCorrect < 90 ? "B+" 
     : percentCorrect < 93 ? "A-" 
     : "A"; 

    Console.WriteLine("\n\nThank you for playing. You've earned you a letter " + 
     "grade of: {0}", letterGrade); 
    Console.Write("\nPress any key to exit..."); 
    Console.ReadKey(); 
} 
+0

@ kegs88不知道這是否回答你的問題? – 2014-09-25 07:37:04