如果正在跳过else语句,我缺少什么?

时间:2018-01-25 03:48:18

标签: c#

所以免责声明:C#noob在这里。我搜索了类似的代码实例,但我无法弄清楚如何将它与我的if语句相关联。我觉得我错过了一些非常明显的东西,但我无法弄明白。如果我不得不猜测它可能在某处放置支架。无论如何,这是声明:

if (netIncome < 30000)
{
    federalTaxRate = 0;
}
else if (netIncome == 30000 && netIncome < 60000)
{
    federalTaxRate = .1;
}
else if (netIncome == 60000 && netIncome < 100000)
{
    federalTaxRate = .2;
}
else if (netIncome == 100000 && netIncome < 250000)
{
    federalTaxRate = .3;
}
else if (netIncome >= 250000)
{
    federalTaxRate = .4;
}

我感谢任何帮助!

2 个答案:

答案 0 :(得分:6)

不应该这样:

else if (netIncome == 30000 && netIncome < 60000)

取而代之的是:

else if (netIncome >= 30000 && netIncome < 60000)

由于&&运算符要求两个条件都为真,所以只有当netIncome等于30,000时,表达式才会为真。

此外,由于上一个if语句确认该值不小于30,000,因此表达式可以缩短为。

else if (netIncome < 60000)

答案 1 :(得分:2)

除了Jonathan Wood已经指出的混乱之外(在第二次检查中,你希望你的收入在30000到60000 之间,但在if条件下你写的是希望它等于30000),这种检查&#34;阈值水平&#34;可以通过这种方式更简单,更安全地完成:

    if (netIncome < 30_000)
    {
        federalTaxRate = 0;
    }
    else if (netIncome < 60_000)
    {
        federalTaxRate = .1;
    }
    else if (netIncome < 100_000)
    {
        federalTaxRate = .2;
    }
    else if (netIncome < 250_000)
    {
        federalTaxRate = .3;
    }
    else //  (netIncome >= 250000)
    {
        federalTaxRate = .4;
    }

通过这种方式,检查完全相同(因为您已经在第一种情况下检查了收入是否小于30000,在第二种情况下您不需要重新检查它大于30000)。

使用这种方法,我们开发人员现在可以很好地专注于查看实际的重要值(阈值值:30000,60000等),而那些不会被写入多次 。 (DRY principle

例如,假设明天0税率的联邦门槛从30000变为31000.如果你在代码中更改了30000中的一个,但忘了改变另一个,那么你现在有一个讨厌的逻辑错误!

编辑:而且,它开始变成很多零。您可以使用_作为忽略的分隔符来编写大数字,而不必像我一样将10次计数为零;)