0

特定の行と列にあるボード上の正方形が、列 1 から列 1 までのクイーンによって攻撃されているかどうかを判断するこのメソッドがあります。しかし、ボード[row-column + y] [y] == QUEENで例外エラーが発生し続けます

  private boolean isUnderAttack(int row, int column)
  {
            for (int y=0; y<column; y++)
            {
             if (board[row][y] == QUEEN ||    // possible horizontal attack
             board[row-column+y][y] == QUEEN ||   // diagonal NW
             board[row+column-y][y] == QUEEN)     // diagonal SW

             return true;
            }

            return false;
  }
4

1 に答える 1

1

以下に注意してください。

row + column - y

この操作は、0 未満の数値を返す場合があります。

クラスは次のようになります。

import java.util.Arrays;

public class Board {

private final int[][] board;
private final int dimention;

public static void main(final String[] args) {
    final Board p = new Board(6);
    for (final int[] i : p.board) {
        System.out.println(Arrays.toString(i));
    }
    p.isUnderAttack(2, 3);
    System.out.println("\n\n");
    for (final int[] i : p.board) {
        System.out.println(Arrays.toString(i));
    }

}

public Board(final int dimention) {
    this.dimention = dimention;
    this.board = new int[dimention][dimention];
}

private void isUnderAttack(final int row, final int column) {

    for (int y = 0; y < this.dimention; y++) {
        this.board[y][row] = 1; // possible horizontal attack
        this.board[column][y] = 2; // possible vertical attack
    }
    int staringRow = column - row;
    int y = 0;
    do {
        this.board[staringRow][y] = 3; // diagonal SW
    } while ((++staringRow < this.dimention) && (++y < this.dimention));

    int staringCol = column + row;
    int x = 0;
    do {
        this.board[x][staringCol] = 4; // diagonal NW

    } while ((++x < this.dimention) && (--staringCol < this.dimention));
}

}

これは、このテストの出力です。

[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]



[0, 0, 1, 0, 0, 4]
[3, 0, 1, 0, 4, 0]
[0, 3, 1, 4, 0, 0]
[2, 2, 4, 2, 2, 2]
[0, 4, 1, 3, 0, 0]
[4, 0, 1, 0, 3, 0]
于 2013-09-24T15:24:00.803 に答える