if-else语句和2d数组

时间:2014-10-02 04:15:40

标签: java if-statement multidimensional-array

我正在编写一种方法,通过返回true或false来检查跳棋游戏的某些移动是否有效。当我想对角移动(而不是跳跃)时,我的代码工作正常。但是,当我试图查看我的作品是否可以跳过另一篇文章时,不会返回任何内容(没有错误,没有真实,没有错误消息,只是空白)。我有一个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 个答案:

答案 0 :(得分:0)

首先,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
  }
}