繁体   English   中英

我的退货声明无法到达

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM