2013-09-24 64 views
0

我有这种方法,确定在给定的行和列的棋盘上的正方形是否受列1到列1中的任何皇后的攻击。但二继续板得到一个异常错误[行列+ Y] [Y] == QUEEN搜索2维数组。

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; 
    } 
+1

有什么异常?的ArrayIndexOutOfBounds?你应该提供更多的信息,但问题是(很可能)很清楚。从例外的指数中,你应该能够弄清楚。 – NeplatnyUdaj

+0

在NW测试中,如果所讨论的方格有低行,低y和高列值,则最终会得到负指数。 –

回答

1

收费attetion到:

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] 
+0

谢谢...不是我在找什么。但给了我一个主意 – user1896464