当前位置: 首页 > 知识库问答 >
问题:

if-field语句和二维数组

夏季萌
2023-03-14

我正在写一个方法,通过返回true或false来检查跳棋游戏的某些动作是否有效。当我想沿对角线移动(而不是跳跃)时,我的代码工作正常。然而,当我尝试查看我的作品是否可以跨越另一个作品时,什么都不会返回(没有false,没有true,没有错误消息,只有空白)。我有一个setLocation方法,它采用棋盘列、行和棋子颜色的三个参数,将棋子放置在棋盘上的上述位置。

如果我在棋盘上设置了棋子,并且我想看看一个棋子是否可以跳过一个相反的颜色棋子,那么如何让我的代码返回true或false?curRow和curCol只是工件所在的当前行和列。destRow和destCol是我想让我的作品去的目的地。

这是我的代码

if (board[curCol][curRow].equals(Piece.WHITE)){
    boolean valid=false;
    if ((curRow+1==destRow&&curCol+1==destCol)&&board[destRow][destCol].equals(Piece.NONE)){
        valid=true;
    }else if ((curRow+1==destRow&&curCol-1==destCol)&&board[destRow][destCol].equals(Piece.NONE)){
        valid=true;
    //jumps up right over piece 
    }else if ((curRow+2==destRow&&curCol+2==destCol)&&board[destRow-1][destCol-1].equals(Piece.BLACK)){
        valid=true;
    //jumps up left over piece
    else if ((curRow+2==destRow&&curCol-2==destCol)&&(board[destRow-1][destCol+1].equals(Piece.BLACK))){
        valid=true;
    }else{
        return valid;
    }
    return valid;
}

共有1个答案

范瀚昂
2023-03-14

首先,Java不能返回“空白”。如果您的方法(您没有显示其声明)是布尔方法,它必须返回布尔方法。

为什么不试试这样的东西:

private static board Peice[][] = new Peice[][]

private enum Peice{
  BLACK(-1, false),
  BLACK_CROWN(-1, true),
  WHITE(1, false),
  WHITE_CROWN(1, true)

  private int direction;
  private boolean crowned;

  public Peice(int direction, boolean crowned){
    this.direction = direction;
    this.crowned = crowned;
  }

  public boolean isLegal(int curRow, int curCol, int destRow, int destCol){
    //not valid if the spot is occupied or if the  move isn't the same distance each way
    if (board[destRow, destCol] != null) || ((Math.abs(destRow - CurRow) != (Math.abs(destCol - curCol)){
      return false;
    }

    if (abs(destRows - curRows) == 1){
      return (destRow - curRow == direction) || crowned;
    } else if (abs(destRows-curRows) == 2){
      return takeMove(curRow, curCol, destRow, destCol);
    // anything but 1 or 2 moves diagonal is never ok.
    } else{
      return false;
    }
  }

  private boolean takeMove(int curRow, int curCol, int destRow, int destCol)
    if (!isOpponent(board[(curRow + destRow)/2, (curCol + destCol)/2])){
      return false;
    }
    return (destRow - curRow) * direction > 0 || crowned;
  }

  private boolean isOpponent(Peice other){
    return other.direction != this.direction
  }
}
 类似资料:
  • 着色器语言GLSL中关于if语句、for语句的使用,和javascript语言、C语言中的if语句、for语句执行逻辑规则基本一致,这里默认你已经有一定的编程基础,也就不做过多讲解,只是简单说明一下。 单独使用if if(x>100){ gl_FragColor = vec4(1.0,0.0,0.0,1.0);//红色 } if-else形式 bool colorBool; // 根据布尔值

  •  if 语句,就是类似于「如果○○的话,做●●」,根据条件判断脚本的一部分是否执行的语法。  语法如下: if(expression) 语句或语句块 else 语句或语句块  第一个“语句或语句块”是当 expression 表达式的结果为真时执行的部分,第二个“语句或语句块”则是结果为假时执行的部分。如果不需要 else 以后的部分,可以省略。 例: if(a==b) inform("a和b相等

  • 两者之间有实际区别吗 和 除了第一个更短之外,一个优先级更高,还是更慢? 编辑: 我意识到这可能并不清楚,但通常是。

  • 问题内容: 当我对目录()使用函数时,代码工作良好,但是当我调用文件()时,代码返回错误。 我在if / else语句中看到了这个问题(即使返回也可以运行),但是我不知道如何在promises中正确使用它。 问题答案: 返回一个承诺,这始终是一个真实的价值。您需要将条件放入回调中才能访问布尔值:

  • 我得到了3个不同的错误:标识符预期,意外的令牌,未知的类:'score'。这些错误在第57-69行。 这个代码的重点是检查一个检查列表是否被检查,如果是,加1得分。它根据得分将输出文本更改为不同的字符串。 ^^XML代码^^

  • 主要内容:示例第一个决策声明中,我们来看看 'if' 语句。在 Erlang 这个语句的一般形式,如下面的程序所显示 - 在 Erlang 中,条件它是计算结果为真或假的表达式。如果条件为真,则 statement#1 将被执行,否则 statement#2 将被执行。 下面的程序是 Erlang 中的 if 表达式的一个简单的例子 - 示例 以下是上述程序需要说明的一些关键点 - 这里所使用的表达式是变量A和