gpt4 book ai didi

java - 重构java中的if语句

转载 作者:行者123 更新时间:2023-11-30 08:13:20 25 4
gpt4 key购买 nike

我需要一些帮助来重构这个 if 语句。我想将百分比声明为常量。我还想制作一个方法,将代码包含在 if 括号内。我还可以做些什么?

if(totalReceiptsAmount >= getIncome() && totalReceiptsAmount <  0.20 * getIncome())
setTaxIncrease(getBasicTax() + 0.05 * getBasicTax());
if(totalReceiptsAmount >= 0.20 * getIncome() && totalReceiptsAmount < 0.40 * getIncome())
setTaxIncrease(getBasicTax() - 0.05 * getBasicTax());
if(totalReceiptsAmount >= 0.40 * getIncome() && totalReceiptsAmount < 0.60 * getIncome())
setTaxIncrease(getBasicTax() - 0.10 * getBasicTax());
if(totalReceiptsAmount >= 0.60 * getIncome())
setTaxIncrease(getBasicTax() - 0.15 * getBasicTax());

最佳答案

代码中的主要问题可能是代码重复,这意味着如果您想更改条件,您可能必须在所有四个条件中应用相同的更改。所以你可以尝试分解出共同的功能,正如你已经为条件所建议的那样。所以你可以定义一个方法

private boolean receiptsAmountIsBetweenFactorOfXAndYOfIncome(double x, double y){
return totalReceiptsAmount >= x * getIncome() && totalReceiptsAmount < y * getIncome();
}

并相应地更新您的 if 语句:

if(receiptsAmountIsBetweenFactorOfXAndYOfIncome(0, 0.2))
setTaxIncrease(getBasicTax() + 0.05 * getBasicTax());
if(receiptsAmountIsBetweenFactorOfXAndYOfIncome(0.2, 0.4))
setTaxIncrease(getBasicTax() - 0.05 * getBasicTax());
if(receiptsAmountIsBetweenFactorOfXAndYOfIncome(0.4, 0.6))
setTaxIncrease(getBasicTax() - 0.10 * getBasicTax());
if(receiptsAmountIsBetweenFactorOfXAndYOfIncome(0.6, 1))
setTaxIncrease(getBasicTax() - 0.15 * getBasicTax());

现在,if 语句的主体中仍然存在重复。所以你可以引入另一种方法:

private void increaseTaxByFactorOfX(double x){
setTaxIncrease(getBasicTax() + x * getBasicTax());
}

并再次更新 if 语句:

if(receiptsAmountIsBetweenFactorOfXAndYOfIncome(0, 0.2))
increaseTaxByFactorOfX(0.05);
if(receiptsAmountIsBetweenFactorOfXAndYOfIncome(0.2, 0.4))
increaseTaxByFactorOfX(-0.05);
if(receiptsAmountIsBetweenFactorOfXAndYOfIncome(0.4, 0.6))
increaseTaxByFactorOfX(-0.10);
if(receiptsAmountIsBetweenFactorOfXAndYOfIncome(0.6, 1))
increaseTaxByFactorOfX(-0.15);

现在,如果需要,您可以检测所用数值中的模式,或者简单地将数值硬编码到数组或列表中,并使用循环而不是多个类似的 if 语句:

double[] factorOfIncome = {0, 0.2, 0.4, 0.6, 1};
double[] taxIncreaseFactor = {0.05, -0.05, -0.10, -0.15};

for(int i = 0; i<taxIncreaseFactor.length; i++)
if(receiptsAmountIsBetweenFactorOfXAndYOfIncome(factorOfIncome[i], factorOfIncome[i+1]))
increaseTaxByFactorOfX(taxIncreaseFactor[i]);

最后的重构步骤完全消除了重复,但在我看来会使代码更难理解。

编辑:请注意,我假设第一个条件应该是

if(totalReceiptsAmount >= 0 * getIncome() && //... 

因为看起来这确实是您打算编写的内容。如果不是这种情况,则需要单独处理第一个条件。

关于java - 重构java中的if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30018345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com