避免了Java中计算的代码冗余



我有一个计算,可以求和或减去一些东西,但这取决于一个简单的条件。我的问题是,我不知道如何更改代码,所以我不需要仅仅用+或-的差来写两次计算。希望有人能帮我。提前谢谢。

public void changePrice(Stock stock, int amount, boolean isBuying) {
double roundRandomNumber = Math.round((0.5 + Math.random()) * 100) / 100.00;
double newPrice;

//calculates plus or minus depending on the buyoption
if (isBuying) {
newPrice = Math.round((stock.getPrice() + roundRandomNumber * 0.1 * amount) * 100) / 100.00;
} else {
newPrice = Math.round((stock.getPrice() - roundRandomNumber * 0.1 * amount) * 100) / 100.00;
}
if (newPrice > 0 && newPrice < 3000) {
stock.setPrice(newPrice);
}
}

您可以使用基于isBuying值的+1-1系数。

newPrice = Math.round((stock.getPrice() + (isBuying ? 1.0 : -1.0) * roundRandomNumber * 0.1 * amount) * 100) / 100.00;

您可以尝试只提取条件中的因子:

public void changePrice(Stock stock, int amount, boolean isBuying) {
double roundRandomNumber = Math.round((0.5 + Math.random()) * 100) / 100.00;
double newPrice;

//calculates plus or minus depending on the buyoption
double factor;
if (isBuying) {
factor = 1.0
} else {
factor = -1.0
}
newPrice = Math.round((stock.getPrice() + (factor * roundRandomNumber) * 0.1 * amount) * 100) / 100.00;
if (newPrice > 0 && newPrice < 3000) {
stock.setPrice(newPrice);
}
}

我提出用( / 100) * 0.1替换roundRandomNumber,得到一个可以简化为* 0.001的表达式。

CCD_ 7也可以是CCD_。

或者使用1 + new Random().nextInt(100)

double roundRandomNumber = Math.ceil((Math.random()) * 100) * 0.001 * amount;
double newPrice = stock.getPrice();
if (isBuying) {
newPrice += roundRandomNumber;
} else {
newPrice -= roundRandomNumber;
}
newPrice = Math.round((newPrice * 100) / 100.00; 
if (newPrice > 0 && newPrice < 3000) {
stock.setPrice(newPrice);
}

对于其余部分,它是保留寄存器原则:我对newPrice进行逐步操作。

边界条件排除了0,这是有问题的。

当然应该提到BigDecimal。其复杂性主要源于需要浮点的不动点运算。除非您需要速度,否则BigDecimal代码可能更可读,尽管很冗长。

最新更新