Java 压缩一个';如果';陈述

Java 压缩一个';如果';陈述,java,if-statement,methods,java-8,Java,If Statement,Methods,Java 8,希望这一条不会给回答带来太多麻烦,但当我在数独项目中写下这一条时,我知道一定有更好的方法来表达这个if条件 提前谢谢各位 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,

希望这一条不会给回答带来太多麻烦,但当我在数独项目中写下这一条时,我知道一定有更好的方法来表达这个if条件

提前谢谢各位

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);
    }
}
publicstaticvoidmodval(intr,intc,intx){

如果((r>=1&&r=1&&c=1&&x),您可以将逻辑提取为布尔值,然后只测试这些值

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);
}
然后

if (withinLimits(r) && withinLimits(c) && withinLimits(x)) {
    sudoku.set(r, c, x);
}
虽然没有比你的好多少,只是从语法上说更简洁一点。而且你也不需要额外的括号。把它们去掉就行了。

如果您使用的是Java8,那么有一种方法可以使用
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);
    }
}

我想你在
(c>=1&&r
中有一个输入错误,如果((r>=1&&r=1&&r=1&&XY您可以将条件提取到一个方法中,并给该方法一个直观的名称。
modVal
是什么意思?
r
c
x
意味着什么?给事物起一个有意义的名称,您就可以得到一个方法的名称。基本上,如果您要用英语陈述该条件,您的意思是什么听起来像“如果是真的”?难看且难以阅读。容易出错。如果你太担心它看起来难看,你总是可以用相同的条件编写一个私有方法。这样代码读起来很好,你就可以完成相同的功能。这是我可以处理的,很好的主意@ManoDestra立即实现。@element11我经常使用这种技术来提高可读性在构造测试中使用冗长的布尔条件。使代码行更短,并允许您通过将逻辑分解为更小的单元来更快地分析逻辑。@taylanu您愿意接受目前给出的任何答案吗?:)我使用的是Java 8,这个解决方案似乎更有效,但同时,我觉得将来我将在该实现的调试中苦苦挣扎。@taylanu你为什么这么认为?对我来说,可读性是个问题,我刚开始使用Java,所以我可能很难理解你的实现会做什么。@taylanu我的不好,我要补充一点解释。
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.