问题描述
我需要一些帮助。我正在基于分数进行数学游戏。我无法解释为什么我的代码中有这个错误。我用正确答案和错误答案进行了测试。该消息框向我显示了相同的消息,即“正确!”每次我在答案框中输入一些数字都无所谓。
bool ok = true;
if (numitor1 == numitor2)
{
numitor3 = numitor2;
numarator3 = numarator1 + numarator2;
if (numitor3 == numitor2 &&
(numarator3 == numarator1 + numarator2))
ok = true;
else ok = false;
}
else
{
numitor3 = numitor1 * numitor2;
numarator3 = numarator1 * numitor2 + numarator2 * numitor1;
if (numarator3 > numitor3 && (numarator3 % numitor3 == 0))
{
numitor3 = 1;
numarator3 = numarator3 / numitor3;
if ((numitor3 == 1) && (numarator3 == numarator3 / numitor3))
ok = true;
else
ok = false;
}
else if (numitor3 > numarator3 && (numitor3 % numarator3 == 0))
{
numitor3 = numitor3 / numarator3;
numarator3 = 1;
if ((numitor3 == numitor3 / numarator3) && numarator3 == 1)
ok = true;
else ok = false;
}
if (ok == 1)
MessageBox.Show("Corect!");
else
MessageBox.Show("Incorect!");
}
解决方法
部分问题是您的逻辑有些奇怪。让我们看一下此代码块,例如:
if (numarator3 > numitor3 && (numarator3 % numitor3 == 0))
{
numitor3 = 1;
numarator3 = numarator3 / numitor3;
if ((numitor3 == 1) && (numarator3 == numarator3 / numitor3))
ok = true;
else
ok = false;
}
进入块时,我们设置numitor3 = 1
。好的,看起来不错。但是然后我们设置numarator3 = numarator3 / numitor3
。这实际上没有任何意义,因为numitor3
仅被设置为1
,并且除以1
的任何数字都是其本身。因此,这两行应该颠倒。
接下来,我们有一个if
的条件,它证明numitor3 == 1
是正确的,因为我们只是将其设置为该值,所以我们再次将numarator3
与自身除以{ {1}},将始终为1
。
这里的错误可能是我们正在比较刚设置的值而不是用户的答案。
帮助解决这些问题的一种方法是,将我们对正确答案的确定与对正确答案与用户输入的比较分开。
这是一种做到这一点的方法,除了重命名外,大部分都使用您的代码:
true
在您的主代码中,您可以像下面这样调用该函数:
/// <summary>
/// Takes in three fractional numbers that represent an addition
/// equation,and returns 'true' if the first fraction plus the
/// second fraction equals the third fraction
/// </summary>
/// <param name="numerator1">Numerator of first fraction</param>
/// <param name="denominator1">Denominator of first fraction</param>
/// <param name="numerator2">Numerator of second fraction</param>
/// <param name="denominator2">Denominator of second fraction</param>
/// <param name="numerator3">Numerator of third fraction</param>
/// <param name="denominator3">Denominator of third fraction</param>
/// <returns>true if first plus second equals third,otherwise false</returns>
public static bool IsAnswerValid(int numerator1,int denominator1,int numerator2,int denominator2,int numerator3,int denominator3)
{
// Determine the numerator and denominator for the correct answer
int answerNumerator;
int answerDenominator;
if (denominator1 == denominator2)
{
answerDenominator = denominator2;
answerNumerator = numerator1 + numerator2;
}
else
{
answerDenominator = denominator1 * denominator2;
answerNumerator = numerator1 * denominator2 + numerator2 * denominator1;
if (answerNumerator > answerDenominator &&
answerNumerator % answerDenominator == 0)
{
answerNumerator = answerNumerator / answerDenominator;
answerDenominator = 1;
}
else if (answerDenominator > answerNumerator &&
answerDenominator % answerNumerator == 0)
{
answerDenominator = answerDenominator / answerNumerator;
answerNumerator = 1;
}
}
// Compare answer numerator and denominator with the user's input
bool isValid = denominator3 == answerDenominator &&
numerator3 == answerNumerator;
return isValid;
}