2
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。

4

4 回答 4

2

编辑:由于 OP 说它是一个ArrayList,我的回答不再适用。

你永远不会更新你的 index 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);
}
于 2015-10-17T06:12:21.293 回答
2

您的变量i永远不会增加。根据 CollectionmyOrders的类型,每次移除第 0 个元素可能不会移动集合中的元素,并且myOrders永远不会为空。

于 2015-10-17T06:13:59.233 回答
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);
于 2015-10-17T06:57:08.607 回答
-1

清理eclipse解决了这个问题。

于 2015-10-17T06:55:55.690 回答