簡體   English   中英

如何重構我的 C# 代碼,以免重復自己?

[英]How can I refactor my C# code so I do not repeat myself?

我建立了一個乘法項目,詢問用戶難度級別和他們想要回答的問題數量,然后用戶將回答隨機乘法問題!

但我正在嘗試重構代碼,所以我不會重復太多次。

任何人都可以幫我減少代碼的可重復性嗎?

這是代碼:

using System;

namespace mathstester
{
    class Program
    {
        public static void Main(string[] args)
        {
            string userDifficulty = "";
            do
            {
                Console.WriteLine("What difficulty level would you like to do! Please type E for Easy, N for Normal and H for hard");
                userDifficulty = Console.ReadLine().ToUpper();
            }while (userDifficulty != "E" && userDifficulty != "N" && userDifficulty != "H");

            int numberOfQuestions = 0;
            int numberOfQuestionsLeft = 0;
            do
            {
                Console.Write("How many questions would you like to answer?Please type a number divisible by 10");
                int.TryParse(Console.ReadLine(), out numberOfQuestions);
                numberOfQuestionsLeft = numberOfQuestions;
            } while (numberOfQuestions % 10 != 0);

            Random random = new Random();
            int easyNumber1 = random.Next(10);
            int easyNumber2 = random.Next(10);
            int normalNumber1 = random.Next(100);
            int normalNumber2 = random.Next(100);
            int hardNumber1 = random.Next(10, 1000);
            int hardNumber2 = random.Next(10, 1000);
            int score = 0;

            while (numberOfQuestionsLeft > 0)
            {
                if (userDifficulty == "E")
                {
                    Console.Write($"What is {easyNumber1} * {easyNumber2} =");
                    int correctAnswer = easyNumber1 * easyNumber2;
                    int userAnswer = Convert.ToInt32(Console.ReadLine());
                    if (correctAnswer == userAnswer)
                    {
                        Console.WriteLine("Well Done!");
                        score++;
                    }
                    else
                    {
                        Console.WriteLine("Your answer is incorrect!");
                    }
                    numberOfQuestionsLeft--;
                    easyNumber1 = random.Next(10);
                    easyNumber2 = random.Next(10);
                }
                else if (userDifficulty == "N")
                {
                    Console.Write($"What is {normalNumber1} * {normalNumber2} =");
                    int correctAnswer = normalNumber1 * normalNumber2;
                    int userAnswer = Convert.ToInt32(Console.ReadLine());
                    if (correctAnswer == userAnswer)
                    {
                        Console.WriteLine("Well Done!");
                        score++;
                    }
                    else
                    {
                        Console.WriteLine("Your answer is incorrect!");
                    }
                    numberOfQuestionsLeft--;
                    normalNumber1 = random.Next(100);
                    normalNumber2 = random.Next(100);
                }
                else if (userDifficulty == "H")
                {
                    Console.Write($"What is {hardNumber1} * {hardNumber2} =");
                    int correctAnswer = hardNumber1 * hardNumber2;
                    int userAnswer = Convert.ToInt32(Console.ReadLine());
                    if (correctAnswer == userAnswer)
                    {
                        Console.WriteLine("Well Done!");
                        score++;
                    }
                    else
                    {
                        Console.WriteLine("Your answer is incorrect!");
                    }
                    numberOfQuestionsLeft--;
                    hardNumber1 = random.Next(10, 1000);
                    hardNumber2 = random.Next(10, 1000);
                }
            }
            Console.WriteLine($"You got a score of {score} out of {numberOfQuestions}");
        }
    }
}

先感謝您!

只需將定義數字的部分從其余部分移開,不要為每個難度使用不同的變量。 另外,在問題之前初始化它們的值就足夠了,不需要前后都這樣做。

using System;

namespace mathstester
{
    class Program
    {
        public static void Main(string[] args)
        {
            string userDifficulty = "";
            do
            {
                Console.WriteLine("What difficulty level would you like to do! Please type E for Easy, N for Normal and H for hard");
                userDifficulty = Console.ReadLine().ToUpper();
            } while (userDifficulty != "E" && userDifficulty != "N" && userDifficulty != "H");

            int numberOfQuestions = 0;
            int numberOfQuestionsLeft = 0;
            do
            {
                Console.Write("How many questions would you like to answer? Please type a number divisible by 10");
                int.TryParse(Console.ReadLine(), out numberOfQuestions);
                numberOfQuestionsLeft = numberOfQuestions;
            } while (numberOfQuestions % 10 != 0);

            Random random = new Random();
            int score = 0;

            while (numberOfQuestionsLeft > 0)
            {
                // Here we define two variables for the numbers
                // and set their values based on the difficulty.
                // Everything else is the same in all cases!
                int number1 = 0;
                int number2 = 0;

                if (userDifficulty == "E") {
                  number1 = random.Next(10);
                  number2 = random.Next(10);
                } else if (userDifficulty == "N") {
                  number1 = random.Next(100);
                  number2 = random.Next(100);
                } else if (userDifficulty == "H") {
                  number1 = random.Next(10, 1000);
                  number2 = random.Next(10, 1000);
                }

                // This code is the same for all difficulty levels!
                Console.Write($"What is {number1} * {number2} =");
                int correctAnswer = number1 * number2;
                int userAnswer = Convert.ToInt32(Console.ReadLine());
                if (correctAnswer == userAnswer)
                {
                    Console.WriteLine("Well Done!");
                    score++;
                }
                else
                {
                    Console.WriteLine("Your answer is incorrect!");
                }
                numberOfQuestionsLeft--;
           }
            Console.WriteLine($"You got a score of {score} out of {numberOfQuestions}");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM