0

我正在尝试创建一个程序,该程序以特定方式在网格上排列 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;
    }
4

3 回答 3

0

您必须添加if栅栏以防止无效检查:

if (row > 0 && board[row-1][column] != null){
    top = board[row+1][column];
}
于 2013-03-04T18:24:55.613 回答
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.
}
于 2013-03-04T18:28:41.720 回答
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;
}
于 2013-03-04T18:31:20.723 回答