我正在做一个数学项目,在该项目中,我会根据用户选择的难度级别向用户询问一些问题!
为了简单起见,我问加,减和乘的问题。对于正常水平,我会问加,减,乘和除的问题。对于硬性水平,我会问乘法,除法,幂和平方根问题。
当用户选择容易和困难的难度级别时,它工作正常,但是当用户选择正常难度时,它只给出附加问题。
这是我的代码:
using System;
namespace mathstester
{
class Program
{
enum UserDifficulty
{
Easy,
Normal,
Hard
}
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.Write("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 numberOfQuestionsLeft = numberOfQuestions;
Random random = new Random();
int score = 0;
while (numberOfQuestionsLeft > 0)
{
var operation = random.Next(1, 7);
int number1 = 0;
int number2 = 0;
switch (userDifficulty)
{
case "E":
switch (operation)
{
case 1:
number1 = random.Next(1000);
number2 = random.Next(1000);
break;
case 2:
number1 = random.Next(1000);
number2 = random.Next(1000);
break;
case 3:
number1 = random.Next(13);
number2 = random.Next(13);
break;
}
break;
case "N":
switch (operation)
{
case 1:
number1 = random.Next(1000);
number2 = random.Next(1000);
break;
case 2:
number1 = random.Next(1000);
number2 = random.Next(1000);
break;
case 3:
number1 = random.Next(1000);
number2 = random.Next(1000);
break;
case 4:
number1 = random.Next(1000);
number2 = random.Next(1000);
break;
}
break;
case "H":
switch (operation)
{
case 3:
number1 = random.Next(1000);
number2 = random.Next(1000);
break;
case 4:
number1 = random.Next(1000);
number2 = random.Next(1000);
break;
case 5:
number1 = random.Next(13);
number2 = random.Next(4);
break;
case 6:
number1 = random.Next(100);
break;
}
break;
}
if(operation == 1 && userDifficulty == "E" || userDifficulty == "N")
{
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--;
}
else if (operation == 2 && (userDifficulty == "E" || userDifficulty == "N"))
{
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--;
}
else if (operation == 3 && (userDifficulty == "E" || userDifficulty == "N" || userDifficulty == "H"))
{
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--;
}
else if (operation == 4 && (userDifficulty == "N" || userDifficulty == "H"))
{
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--;
}
else if (operation == 5 && userDifficulty == "H")
{
Console.Write($"What is {number1} ^ {number2} =");
double correctAnswer = Math.Pow(number1, number2);
int userAnswer = Convert.ToInt32(Console.ReadLine());
if (correctAnswer == userAnswer)
{
Console.WriteLine("Well Done!");
score++;
}
else
{
Console.WriteLine("Your answer is incorrect!");
}
numberOfQuestionsLeft--;
}
else if (operation == 6 && userDifficulty == "H")
{
Console.Write($"What is √{number1} =");
double correctAnswer = Math.Sqrt(number1);
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}");
}
}
}
有人可以帮助我发现我的错误吗?
谢谢!
您的问题在这一行:
if (operation == 1 && userDifficulty == "E" || userDifficulty == "N")
&&
优先于||
。这意味着它将先检查operation == 1
和userDifficulty == "E"
,然后再单独检查userDifficulty == "N"
。由于对于您的通常难度而言,最后一个条件总是正确的,因此它将始终选择该条件(因为它是代码中的第一个选项)。
要修复它,请添加括号。
if (operation == 1 && (userDifficulty == "E" || userDifficulty == "N"))
根据您的条件,请勿使用|| (或)受条件限制,因为它还读取了其他条件,使用了“ if(operation == 1 && user Difficulty ==“ E”)“,而不是XX if(operation == 1 && user Difficulty ==” E“ ||用户难度==“ N”)XX。