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

あなたが決定したように、[-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

if無効なチェックを防ぐためにフェンスを追加する必要があります。

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