java中increase,java - 在Java中重构if语句 - 堆栈内存溢出

这篇博客探讨了如何通过定义辅助方法来优化代码,减少重复,并提高代码可读性。作者建议创建`receiptsAmountIsBetweenFactorOfXAndYOfIncome`和`increaseTaxByFactorOfX`方法,以简化if语句,并提出了使用数组和循环进一步消除重复的方案,以适应条件变化。
摘要由CSDN通过智能技术生成

代码中的主要问题可能是代码重复 ,这意味着如果要更改条件(例如条件),则可能必须在所有四个条件中应用相同的更改。 因此,您可以尝试排除常见功能,如您已为条件句建议的那样。 所以你可以定义一个方法

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

if(receiptsAmountIsBetweenFactorOfXAndYOfIncome(factorOfIncome[i], factorOfIncome[i+1]))

increaseTaxByFactorOfX(taxIncreaseFactor[i]);

最后的重构步骤完全摆脱了重复,但是在我看来,代码变得不太容易理解。

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值