压缩'If'语句

时间:2016-05-27 18:12:17

标签: java if-statement methods

希望这个问题在回答时不会造成太大麻烦,但是当我在我的数独项目中写出来时,我知道必须有更好的方法来表达这个条件。

先谢谢你们。

public static void modVal(int r, int c, int x) {
    if((r>=1 && r<=9) && (c>=1 && c<=9) && (x>=1 && x<=9)) {
        sudoku.set(r,c,x);
    }
}

2 个答案:

答案 0 :(得分:7)

您可以将逻辑拉出为布尔值,然后测试它们,例如。

boolean validRow = r >= 1 && r <= 9;
boolean validColumn = c >= 1 && c <= 9;
boolean validValue = x >= 1 && x <= 9;
if (validRow && validColumn && validValue) {
    sudoku.set(r, c, x);
}

或者,假设每个(行,列和值都包含1-9)的限制相同,那么您可以将其提取到名为withinLimits(value)的方法,该方法检查1到9之间的值

public boolean withinLimits(int value) {
    return value >= 1 && value <= 9;
}

则...

if (withinLimits(r) && withinLimits(c) && withinLimits(x)) {
    sudoku.set(r, c, x);
}

与你所拥有的相比并不是很好,从语法上来说只是一点点简洁。而且您也不需要额外的括号。放下它们。

答案 1 :(得分:6)

如果您使用的是Java 8,则可以使用IntStream。优点是你可以使用任意数量的参数。

public static void modVal(int r,int c,int x){
    if (IntStream.of(r,c,x).allMatch(i -> i>=1 && i<=9)) {
        sudoku.set(r,c,x);
    }
}

Instream.of(r,c,x) // This will just stream over the data given in parameters.
        .allMatch(Predicate) // This will return true if all the data entered as parameter has been tested within Predicate and returned true.