[英]My Return Statement is Unreachable
public BigDecimal calculateTotal() {
BigDecimal percent = BigDecimal.valueOf(0.9);
int i = 0;
BigDecimal price = BigDecimal.valueOf(0.0);
while(!myOrders.isEmpty()){
if (!myOrders.get(i).getItem().isBulk() && myMembership == true){
price = price.add(myOrders.get(i).calculateOrderTotal().multiply(percent));
myOrders.remove(i);
}
else{
price = price.add(myOrders.get(i).calculateOrderTotal());
myOrders.remove(i);
}
}
//WHY IS THIS UNREACHABLE?!
return price.setScale(2, RoundingMode.HALF_EVEN);
}
我知道return语句之后的所有内容都是无法访问的代码,但是我唯一的return语句是不可访问的,而且我不知道为什么。 while循环就是这样,因为我正在抓住稻草,我知道它可能不会做我想做的事情。 myOrders是一个ArrayList。
编辑 :由于OP表示这是一个ArrayList
,我的答案不再适用。
您永远不会更新索引i
。 这应该工作:
public BigDecimal calculateTotal() {
BigDecimal percent = BigDecimal.valueOf(0.9);
int i = 0;
BigDecimal price = BigDecimal.valueOf(0.0);
while(!myOrders.isEmpty()) {
if (!myOrders.get(i).getItem().isBulk() && myMembership == true) {
price = price.add(myOrders.get(i).calculateOrderTotal().multiply(percent));
myOrders.remove(i);
} else {
price = price.add(myOrders.get(i).calculateOrderTotal());
myOrders.remove(i);
}
i++; // <-- You were missing this
}
// Not unreachable anymore :)
return price.setScale(2, RoundingMode.HALF_EVEN);
}
您的变量i
永远不会增加。 取决于集合myOrders
类型, myOrders
删除第0个元素可能不会移动集合中的元素,并且myOrders
永远不会为空。
发布的代码中没有任何内容可以解释该错误。 既然您说您的IDE是Eclipse,我建议清理该项目。 另外,在查看此错误之前,请确保已修复所有其他错误。 该错误没有意义,我怀疑您的项目中还有其他编译器错误,这些错误会以某种方式引起这种奇怪的副作用。 修复所有其他问题后,该选项自然会消失。
顺便说一句,为了更清楚地看到,这是相同代码的清理版本,其功能完全相同:
BigDecimal percent = BigDecimal.valueOf(0.9);
BigDecimal price = BigDecimal.ZERO;
while (!myOrders.isEmpty()) {
Order first = myOrders.get(0);
BigDecimal subtotal = first.calculateOrderTotal();
if (!first.getItem().isBulk() && myMembership) {
subtotal = subtotal.multiply(percent);
}
price = price.add(subtotal);
myOrders.remove(0);
}
return price.setScale(2, RoundingMode.HALF_EVEN);
蚀食解决了这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.