从循环中删除return语句

时间:2017-05-24 11:32:58

标签: java

请我从循环中删除了返回语句,并且在循环结束时只有两个方法的返回语句。

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

3 个答案:

答案 0 :(得分:2)

我会标记外部循环,并在result被分配false后突破它,例如:

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

答案 1 :(得分:1)

您可以使用boolean变量来存储返回值,并在方法的末尾返回该变量:

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

请注意,一旦确定返回值为false,您就不想继续循环。由于你有嵌套循环,break语句不够(因为它只会突破内循环),所以我将result变量添加到两个循环的条件中。

答案 2 :(得分:1)

您还可以使用Java 8 Streams将嵌套循环转换为嵌套的allMatchanyMatch语句。请注意,使用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)));
}