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);
}
我知道返回语句之后的任何内容都是无法访问的代码,但我唯一的返回语句是无法访问的,我无法弄清楚原因。 while循环是这样的,因为我正在抓住稻草,我知道它可能不会做我想做的事情。 myOrders是一个ArrayList。
答案 0 :(得分:2)
编辑:由于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);
}
答案 1 :(得分:2)
您的变量i
永远不会增加。根据Collection myOrders
的类型,每次删除第0个元素可能不会移动集合中的元素,myOrders
将永远不会为空。
答案 2 :(得分:1)
发布的代码中没有任何内容可以解释错误。 既然你说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);
答案 3 :(得分:-1)
清洁日食解决了这个问题。