我正在尝试创建一个程序,以特定的方式在网格上排列6张卡,这样就不会有任何卡与相同类型的其他卡相邻(类型为王者,女王和杰克)。网格是4x4,但我只能将卡放在以下模式中:
[ ][ ][x][ ]
[x][x][x][ ]
[ ][x][x][x]
[ ][ ][x][ ]
现在,我的主要问题是当我的方法尝试检查卡片类型的相邻单元格时。当它从0,0开始时,它会尝试检查[row-1] [column],这显然不起作用,因为它转换为-1,0。问题是,我不知道如何正确实现这一点。
如果之前已经问过这个问题,我很抱歉,因为我不确定要搜索什么(或者如何正确地命名这个问题)。
private boolean bordersCard(int row, int column, char cardChar)
{
Candidate center = board[row][column];
Candidate top;
Candidate bottom;
Candidate left;
Candidate right;
if (board[row-1][column] != null){
top = board[row+1][column];
}
else
{
top = new Candidate('?', 0);
}
if (board[row+1][column] != null){
bottom = board[row+1][column];
}
else
{
bottom = new Candidate('?', 0);
}
if (board[row][column-1] != null){
left = board[row][column-1];
}
else
{
left = new Candidate('?', 0);
}
if (board[row][column+1] != null){
right = board[row][column+1];
}
else
{
right = new Candidate('?', 0);
}
if ((center.getCardChar() == top.getCardChar()) || (center.getCardChar() == bottom.getCardChar()) ||
(center.getCardChar() == left.getCardChar()) || (center.getCardChar() == right.getCardChar())){
return false;
}
return true;
}
答案 0 :(得分:0)
您必须添加if
围栏以防止无效检查:
if (row > 0 && board[row-1][column] != null){
top = board[row+1][column];
}
答案 1 :(得分:0)
如您所知,检查[-1] [0]不起作用。但是你不需要检查那个不存在的插槽。只需确保不要运行数组的开头或结尾。另外,请确保您在if
内执行与您的条件相同的数学运算:
if ((row - 1) >= 0 && (row - 1) < board.length && board[row-1][column] != null){
top = board[row-1][column]; // Use -1 to match condition.
}
答案 2 :(得分:0)
如果任何索引超出范围,则将它们分配为NULL。在Candidate中创建一个方法isSameType(Candidate other);
isSameType(Candidate other)
{
if(other == null)
return false;
else
retrun getCardChar() == other.getCardChar();
}
将你的if改为:
if(center.isSameType(top) || center.isSameType(bottom) || ...)
{
return false;
}