Java 从循环中删除return语句

Java 从循环中删除return语句,java,Java,请允许我从循环中删除returmn语句,并且在两个方法的循环末尾只有一个return语句 private boolean productFitsAt(int lOrigin, int wOrigin, int[] product) { for (int i = wOrigin; i < wOrigin + product[Data.WID]; i++) { for (int j = lOrigin; j < lOrigin + product[Data.

请允许我从循环中删除returmn语句,并且在两个方法的循环末尾只有一个return语句

   private boolean productFitsAt(int lOrigin, int wOrigin, int[] product) {
    for (int i = wOrigin; i < wOrigin + product[Data.WID]; i++) {
        for (int j = lOrigin; j < lOrigin + product[Data.LEN]; j++) {
            if (i >= BOX_WIDTH || j >= BOX_LENGHT || BOX[i][j] != EMPTY) {
                return false;
            }
        }
    }
    return true;
}

  private boolean putProductIntoBox(int[] product) {
    int[] a = getFreePositionToFit(product);
    if (a == null) {
        return false;
    }
    if (maxWeight < product[Data.WT]) {
        return false;
    }
    for (int i = a[0]; i < a[0] + product[Data.WID]; i++) {
        for (int j = a[1]; j < a[1] + product[Data.LEN]; j++) {
            BOX[i][j] = product[Data.ID];
        }
    }
    maxWeight -= product[Data.WT];
    return true;
}
private boolean productFitsAt(int-lOrigin、int-wOrigin、int[]product){
for(int i=wOrigin;i=BOX|u宽度| j>=BOX|u长度| BOX[i][j]!=空){
返回false;
}
}
}
返回true;
}
私有布尔putProductIntoBox(int[]产品){
int[]a=getFreePositionToFit(产品);
如果(a==null){
返回false;
}
if(最大重量<产品[Data.WT]){
返回false;
}
对于(int i=a[0];i
您可以使用
布尔值
变量存储返回值,并在方法末尾返回该变量:

private boolean productFitsAt(int lOrigin, int wOrigin, int[] product) {
    boolean result = true;
    for (int i = wOrigin; i < wOrigin + product[Data.WID] && result; i++) {
        for (int j = lOrigin; j < lOrigin + product[Data.LEN] && result; j++) {
            if (i >= BOX_WIDTH || j >= BOX_LENGHT || BOX[i][j] != EMPTY) {
                result = false;
            }
        }
    }
    return result;
}
private boolean productFitsAt(int-lOrigin、int-wOrigin、int[]product){
布尔结果=真;
对于(int i=wOrigin;i=BOX|u宽度| j>=BOX|u长度| BOX[i][j]!=空){
结果=假;
}
}
}
返回结果;
}

请注意,一旦确定返回值为
false
,就不希望继续循环。由于您有嵌套的循环,一个break语句是不够的(因为它只会从内部循环中断),因此我将
result
变量添加到两个循环的条件中。

我将标记外部循环,并在分配
result
后中断它,例如:

private boolean productFitsAt(int lOrigin, int wOrigin, int[] product) {
    boolean result = true;
    outer :for (int i = wOrigin; i < wOrigin + product[Data.WID]; i++) {
            for (int j = lOrigin; j < lOrigin + product[Data.LEN]; j++) {
                if (i >= BOX_WIDTH || j >= BOX_LENGHT || BOX[i][j] != EMPTY) {
                    result = false;
                    break outer;
                }
            }
        }
    return result;
}
private boolean productFitsAt(int-lOrigin、int-wOrigin、int[]product){
布尔结果=真;
外部:for(int i=wOrigin;i=BOX|u宽度| j>=BOX|u长度| BOX[i][j]!=空){
结果=假;
打破外部;
}
}
}
返回结果;
}

您还可以使用Java8流将嵌套循环转换为嵌套的
allMatch
anyMatch
语句。请注意,使用
allMatch
时,必须反转条件:

private boolean productFitsAt(int lOrigin, int wOrigin, int[] product) {
    return IntStream.range(wOrigin, wOrigin + product[Data.WID])
            .allMatch(i -> IntStream.range(lOrigin, lOrigin + product[Data.LEN])
                    .allMatch(j -> (i < BOX_WIDTH && j < BOX_LENGTH && BOX[i][j] == EMPTY)));
}
private boolean productFitsAt(int-lOrigin、int-wOrigin、int[]product){
返回IntStream.range(wOrigin,wOrigin+product[Data.WID])
.allMatch(i->IntStream.range(lOrigin,lOrigin+product[Data.LEN])
.allMatch(j->(i
只需选择
返回false文本,然后按delete键,那么一旦确定结果为
false
,为什么要循环继续执行?@DarshanMehta我刚刚解决了这个问题。这个答案效率低下,性能比OP的原始解决方案差。@tobias_k Nope,中断还不够,因此,我使用了另一种解决方案。@DarshanMehta答案符合OP的要求,即在末尾有一个返回语句。我可以使用break,也可以使用break,我不想使用stream@Helen您不“应该”使用多个
返回
,或
中断
,或
。。。也许告诉我们你可以用什么来代替会更快。