Java 如何压缩由OR运算符组成的if语句?

Java 如何压缩由OR运算符组成的if语句?,java,if-statement,Java,If Statement,我有一个tic-tac趾板,在检查胜利条件之前,我检查board[]]上的集合中存储的对象是否为空 例如: if(board[0][j] == null || board[1][j] == null || board[2][j] == null)//and so on //do something else //proceed with row evaluation 没有一个好方法可以进一步浓缩这些内容。但是,如果您主要关心的是可读性,那么可以将代码移动到一个私有helper方法中,并为该

我有一个tic-tac趾板,在检查胜利条件之前,我检查board[]]上的集合中存储的对象是否为空

例如:

if(board[0][j] == null || board[1][j] == null || board[2][j] == null)//and so on
//do something
else
  //proceed with row evaluation

没有一个好方法可以进一步浓缩这些内容。但是,如果您主要关心的是可读性,那么可以将代码移动到一个私有helper方法中,并为该方法指定一个名称,表示您正在评估的条件

例如


您可以将其命名为
checkForNull(…)
,或者您可以将其命名为更能描述您在检查这些值是否为null时实际查找的内容的名称,例如
isVictoryCondition(…)
,如果这表示胜利条件。

板中添加一个方法,如:

public boolean hasAnyNull() {
   boolean found = false;
   for (int i = 0 ; !found && i < board.width ; i++) {
      for (int j = 0; !found && j < board.height ; j++ {
         if (board[i][j] == null) {
            found = true;
         }
      }
   }
   return found;
}
public boolean hasAnyNull(){
布尔值=false;
对于(int i=0;!已找到&&i
并测试
if(hasAnyNull()){…}
。该方法在第一个
null
处返回,与
条件完全相同


如果您愿意,该方法可以将电路板作为参数。

好吧,您可以使用循环…但只有三个条件,它真的如此糟糕吗?问题是,如果我使用循环,第一个值有可能被评估为不为null,然后继续执行if的主体。我要做的是获取一组数据,如果我t为null,执行else语句。嗯,否-您使用循环来确定是否有任何值为null,然后在此基础上使用
if
语句。对于三个值,这将比您当前的方法更冗长。随着条件数量的增加,它将变得越来越有吸引力。您可以执行
IntStream.range(0,3).mapToObj(i->board[i][j]==null).anyMatch(i->i)
。但对于3个值来说,这不是一个好主意。@JonSkeet我希望能够计算任何范围的值,If语句只需要一个参数就可以为true。但我想看看是否至少有一个值为null。是的,但是如果我想制作任意大小的电路板,我必须手动输入索引以进行检查。I want以一种检查所有条件而不仅仅是一个条件的方式来概括它。你可以使用私有方法内部的循环来完成这项工作。他只想测试一行。事实上,正如我所理解的,在评估胜利条件之前,检查整个棋盘中的任何空值。对不起,问题的焦点只是检查一个row表示空值。如果不存在->求值。@AdrianleonHard感谢您的帮助。我稍微对它进行了MIDI,但这基本上就是我所缺少的。@AbbéRésina
public boolean hasAnyNull() {
   boolean found = false;
   for (int i = 0 ; !found && i < board.width ; i++) {
      for (int j = 0; !found && j < board.height ; j++ {
         if (board[i][j] == null) {
            found = true;
         }
      }
   }
   return found;
}