希望这个问题在回答时不会造成太大麻烦,但是当我在我的数独项目中写出来时,我知道必须有更好的方法来表达这个条件。
先谢谢你们。
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);
}
}
答案 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.