我的 Return 语句无法访问
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
永远不会递增。根据 Collection myOrders
的类型,每次移除第 0 个元素可能不会移动集合中的元素,并且 myOrders
永远不会为空。
清理eclipse解决了问题。
发布的代码中没有任何内容可以解释错误。
既然你说你的 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);
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
永远不会递增。根据 Collection myOrders
的类型,每次移除第 0 个元素可能不会移动集合中的元素,并且 myOrders
永远不会为空。
清理eclipse解决了问题。
发布的代码中没有任何内容可以解释错误。 既然你说你的 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);