我怎样才能让这个等式在这个嵌套的 if/else 语句中为 c# 工作?
How can i get this equation to work within this nested if/else statement for c#?
在用户端获得 pass 20 后,我的 if/else 没有获取方程的下一个变体。我知道它是因为设置了总计 = (numberofchecks * twentychecks) + (fee);但我不知道用什么来让它移动到方程的下一个变体。负数、超过 1000 和格式异常有效。
总计 = (numberofchecks * twentychecks) + (费用);
TotalLabel.Text = total.ToString("C");
// if else (5 or 6)
if ( numberofchecks < 20 && numberofchecks == 0)
{
total = (numberofchecks * twentychecks) + (fee);
}
else if ( numberofchecks < -1)
{
MessageBox.Show("Number of checks must be between 0 and 1000");
}
else if (numberofchecks == 20 && numberofchecks <= 39)
{
total = (numberofchecks * thirtyninechecks) + (fee);
}
else if (numberofchecks == 40 && numberofchecks <= 59)
{
total = (numberofchecks * fiftyninechecks) + (fee);
}
else if (numberofchecks == 60 && numberofchecks <=1000)
{
total = (numberofchecks * thousandchecks) + (fee);
}
else if (numberofchecks > 1000)
{
MessageBox.Show("Number of checks must be between 0 and 1000");
}
}
catch(FormatException )
{
MessageBox.Show(" Please enter a number");
}
看代码,好像条件设置不正确。
更好的条件设置是始终首先检查不适当的情况。
因此可以将以下检查范围缩小为有效范围。
// Check inappropriate cases first to reduce the scope of other checks
if (numberofchecks < 0 || numberofchecks >= 1000) {
MessageBox.Show("Number of checks must be between 0 and 1000");
} else {
// Guess you don't want 20 to satisfy the twentychecks as well?
if (numberofchecks < 20) {
// cases: 0 to 19
total = (numberofchecks * twentychecks) + (fee);
} else if (numberofchecks < 40) {
// cases: 20 to 39
total = (numberofchecks * thirtyninechecks) + (fee);
} else if (numberofchecks < 60) {
// cases: 40 to 59
total = (numberofchecks * fiftyninechecks) + (fee);
} else {
// cases: 60 to 999
total = (numberofchecks * thousandchecks) + (fee);
}
TotalLabel.Text = total.ToString("C");
}
首先,我们只看您的一个 if 语句,我们看到以下内容
else if (numberofchecks == 20 && numberofchecks <= 39)
嗯,如果 numberofchecks
等于 20,那么它总是 <= 39,所以第二部分是多余的。这对你所有的陈述都是一样的。
我想你的意思是
else if (numberofchecks >= 20 && numberofchecks <= 39)
那么,这样会更合乎逻辑。
这应该可以解决您眼前的问题。但我们可以进一步改进它。
一般最好先检查输入的数据是否有效。所以这应该首先完成。您甚至可以将其移至另一种方法。 (如果您要执行大量验证,则很有用)。然后你就可以进行计算了
if ( numberofchecks < -1 || numberofchecks > 1000)
{
MessageBox.Show("Number of checks must be between 0 and 1000");
}
else
{
//Rest here
}
但如果您使用的是 C#9 或更高版本,您实际上可以将 if 语句移动到支持范围的 switch 语句。在这种情况下,我们也可以对无效数据使用默认大小写。
switch (numberofchecks)
{
case >= 0 and < 20:
total = (numberofchecks * twentychecks) + (fee);
break;
case >= 20 and <= 39:
total = (numberofchecks * thirtyninechecks) + (fee);
break;
case >= 40 and < 59:
total = (numberofchecks * fiftyninechecks) + (fee);
break;
case >= 60 and < 1000:
total = (numberofchecks * thousandchecks) + (fee);
break;
default:
MessageBox.Show("Number of checks must be between 0 and 1000");
break;
}
在用户端获得 pass 20 后,我的 if/else 没有获取方程的下一个变体。我知道它是因为设置了总计 = (numberofchecks * twentychecks) + (fee);但我不知道用什么来让它移动到方程的下一个变体。负数、超过 1000 和格式异常有效。
总计 = (numberofchecks * twentychecks) + (费用);
TotalLabel.Text = total.ToString("C");
// if else (5 or 6)
if ( numberofchecks < 20 && numberofchecks == 0)
{
total = (numberofchecks * twentychecks) + (fee);
}
else if ( numberofchecks < -1)
{
MessageBox.Show("Number of checks must be between 0 and 1000");
}
else if (numberofchecks == 20 && numberofchecks <= 39)
{
total = (numberofchecks * thirtyninechecks) + (fee);
}
else if (numberofchecks == 40 && numberofchecks <= 59)
{
total = (numberofchecks * fiftyninechecks) + (fee);
}
else if (numberofchecks == 60 && numberofchecks <=1000)
{
total = (numberofchecks * thousandchecks) + (fee);
}
else if (numberofchecks > 1000)
{
MessageBox.Show("Number of checks must be between 0 and 1000");
}
}
catch(FormatException )
{
MessageBox.Show(" Please enter a number");
}
看代码,好像条件设置不正确。
更好的条件设置是始终首先检查不适当的情况。
因此可以将以下检查范围缩小为有效范围。
// Check inappropriate cases first to reduce the scope of other checks
if (numberofchecks < 0 || numberofchecks >= 1000) {
MessageBox.Show("Number of checks must be between 0 and 1000");
} else {
// Guess you don't want 20 to satisfy the twentychecks as well?
if (numberofchecks < 20) {
// cases: 0 to 19
total = (numberofchecks * twentychecks) + (fee);
} else if (numberofchecks < 40) {
// cases: 20 to 39
total = (numberofchecks * thirtyninechecks) + (fee);
} else if (numberofchecks < 60) {
// cases: 40 to 59
total = (numberofchecks * fiftyninechecks) + (fee);
} else {
// cases: 60 to 999
total = (numberofchecks * thousandchecks) + (fee);
}
TotalLabel.Text = total.ToString("C");
}
首先,我们只看您的一个 if 语句,我们看到以下内容
else if (numberofchecks == 20 && numberofchecks <= 39)
嗯,如果 numberofchecks
等于 20,那么它总是 <= 39,所以第二部分是多余的。这对你所有的陈述都是一样的。
我想你的意思是
else if (numberofchecks >= 20 && numberofchecks <= 39)
那么,这样会更合乎逻辑。
这应该可以解决您眼前的问题。但我们可以进一步改进它。
一般最好先检查输入的数据是否有效。所以这应该首先完成。您甚至可以将其移至另一种方法。 (如果您要执行大量验证,则很有用)。然后你就可以进行计算了
if ( numberofchecks < -1 || numberofchecks > 1000)
{
MessageBox.Show("Number of checks must be between 0 and 1000");
}
else
{
//Rest here
}
但如果您使用的是 C#9 或更高版本,您实际上可以将 if 语句移动到支持范围的 switch 语句。在这种情况下,我们也可以对无效数据使用默认大小写。
switch (numberofchecks)
{
case >= 0 and < 20:
total = (numberofchecks * twentychecks) + (fee);
break;
case >= 20 and <= 39:
total = (numberofchecks * thirtyninechecks) + (fee);
break;
case >= 40 and < 59:
total = (numberofchecks * fiftyninechecks) + (fee);
break;
case >= 60 and < 1000:
total = (numberofchecks * thousandchecks) + (fee);
break;
default:
MessageBox.Show("Number of checks must be between 0 and 1000");
break;
}