如何在Switch语句中使用C#enum,同时保持其余代码不变
我正在做一个C#数学项目,用户根据他们选择的难度回答一个加法、减法、乘法、除法、幂或平方根问题 我刚刚开始使用enum,但我不知道如何将它放在switch语句中,以便我的其余代码可以正常工作 以下是我目前的代码:如何在Switch语句中使用C#enum,同时保持其余代码不变,c#,math,enums,console,C#,Math,Enums,Console,我正在做一个C#数学项目,用户根据他们选择的难度回答一个加法、减法、乘法、除法、幂或平方根问题 我刚刚开始使用enum,但我不知道如何将它放在switch语句中,以便我的其余代码可以正常工作 以下是我目前的代码: using System; namespace mathstester { class Program { public enum UserDifficulty { Easy, Norma
using System;
namespace mathstester
{
class Program
{
public enum UserDifficulty
{
Easy,
Normal,
Hard
}
public enum MathOperation
{
Addition = 1,
Subtraction = 2,
Multiplication = 3,
Division = 4,
Power = 5,
SquareRoot = 6
}
public static (int operationMin, int operationMax) GetMathOperationForDifferentDifficulties(UserDifficulty userDifficulty)
{
switch (userDifficulty)
{
case UserDifficulty.Easy:
return (1, 4);
case UserDifficulty.Normal:
return (1, 5);
case UserDifficulty.Hard:
return (3, 7);
default:
throw new Exception();
}
}
public static (string message, double correctAnswer) GetMathsEquation(MathOperation mathOperation, UserDifficulty userDifficulty)
{
int number1;
int number2;
Random random = new Random();
switch (mathOperation)
{
case MathOperation.Addition:
number1 = random.Next(1000);
number2 = random.Next(1000);
return ($"{number1} + {number2}", number1 + number2);
case MathOperation.Subtraction:
number1 = random.Next(1000);
number2 = random.Next(1000);
return ($"{number1} - {number2}", number1 - number2);
case MathOperation.Multiplication:
number1 = userDifficulty == UserDifficulty.Easy ? random.Next(13) : random.Next(1000);
number2 = userDifficulty == UserDifficulty.Easy ? random.Next(13) : random.Next(1000);
return ($"{number1} * {number2}", number1 * number2);
case MathOperation.Division:
number1 = random.Next(10000);
number2 = random.Next(1000);
return ($"{number1} / {number2}", number1 / (double)number2);
case MathOperation.Power:
number1 = random.Next(13);
number2 = random.Next(5);
return ($"{number1} ^ {number2}", Math.Pow(number1, number2));
case MathOperation.SquareRoot:
number1 = random.Next(1000);
return ($"√{number1}", Math.Sqrt(number1));
default:
throw new Exception();
}
}
public static int GetResult(int numberOfQuestionsLeft, string userDifficulty)
{
int score = 0;
Random random = new Random();
var (operationMin, operationMax) = GetMathOperationForDifferentDifficulties(userDifficulty);
while (numberOfQuestionsLeft > 0)
{
int mathOperation = random.Next(operationMin, operationMax);
var (message, correctAnswer) = GetMathsEquation(mathOperation, userDifficulty);
if (mathOperation == 4 || mathOperation == 6)
{
Console.Write($"To the nearest integer, What is {message} =");
}
else
{
Console.Write($"What is {message} =");
}
double userAnswer = Convert.ToDouble(Console.ReadLine());
if (Math.Round(correctAnswer) == userAnswer)
{
Console.WriteLine("Well Done!");
score++;
}
else
{
Console.WriteLine("Your answer is incorrect!");
}
numberOfQuestionsLeft--;
}
return score;
}
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;
do
{
Console.WriteLine("How many questions would you like to answer? Please type a number divisible by 10!");
int.TryParse(Console.ReadLine(), out numberOfQuestions);
} while (numberOfQuestions % 10 != 0);
int score = GetResult(numberOfQuestions, userDifficulty);
Console.WriteLine($"You got a score of {score} out of {numberOfQuestions}");
}
}
}
您的问题似乎在于困难的选择-在
Main()
方法中,您需要输入E
、N
或H
作为困难度,然后将其传递到GetResult()
并继续传递到getMathOperationforDifferentDifferences()
但是,由于枚举是由C#中的数字类型支撑的,因此这将失败并引发异常
要解决此问题,您需要将E
、N
或H
分别转换为usercoudity.Easy
、usercoudity.Normal
或usercoudity.Hard
,然后将其传递给其他用户
下面是如何修改Main()
来执行此操作:
public static void Main(string[] args)
{
string difficultyInput = "";
UserDifficulty userDifficulty = UserDifficulty.Easy // default to start
do
{
Console.WriteLine("What difficulty level would you like to do! Please type E for Easy, N for Normal and H for hard");
difficultyInput = Console.ReadLine().ToUpper();
} while (difficultyInput != "E" && difficultyInput != "N" && difficultyInput != "H");
switch(difficultyInput) {
case "E":
userDifficulty = UserDifficulty.Easy;
break;
case "N":
userDifficulty = UserDifficulty.Normal;
break;
case "H":
userDifficulty = UserDifficulty.Hard;
break;
}
int numberOfQuestions = 0;
do
{
Console.WriteLine("How many questions would you like to answer? Please type a number divisible by 10!");
int.TryParse(Console.ReadLine(), out numberOfQuestions);
} while (numberOfQuestions % 10 != 0);
int score = GetResult(numberOfQuestions, userDifficulty);
Console.WriteLine($"You got a score of {score} out of {numberOfQuestions}");
}
请记住,您需要更改
GetResult()
以接受用户难度
输入,而不是字符串
,旁注:不要继续使用new Random()
在类中保留它的单个静态实例。谢谢!!但是在你写的第二行中,userdemobility userdemobility=userdemobility.Easy
有没有办法将userdemobility
设置为userdemobility.Empty
之类的?这将有助于使代码看起来更干净!如果要将其添加到枚举中,则可以。