java - 我的返回单无法访问

标签 java return unreachable-code

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);
}

关于java - 我的返回单无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33183368/

相关文章:

python - 我告诉Python骰子值的代码有什么问题?

Ada 抑制无法访问的代码或缺少返回

java - 构建网页内容过滤器

java - Arraylist 打印带有计数的对象

java - 拖拽时, stub 中的 ListView 会变黑。

java - 从 Spring 支架 Controller 返回带有查询参数的响应

java - 获取值的正确方法?

c++ - 如何处理在 C/C++ 中返回的指向动态内存的指针

c# - 无法访问的代码 C#

java - 循环java后到达代码