[英]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.