Java 递归计算2d数组中的组大小

Java 递归计算2d数组中的组大小,java,Java,我试图从一个输入点计算总的组大小。用户将输入点(行、列)和组,如: __XX __X_ 将返回3,因为它有3个X。所以我几乎已经明白了这一点,但我的问题是,在某些情况下,它并没有计算一些X。例如: _XX XXX __XX __XX __XX __XX ___X __X_ 如果我在最左上角的X上调用此方法,它将返回4(它不计算最左下角的X,但如果我在最左下角的X上调用此方法,它将返回5。另一个示例: _XX XXX __XX __XX __XX __XX ___X __X_ 现在,它应

我试图从一个输入点计算总的组大小。用户将输入点(行、列)和组,如:

__XX
__X_
将返回3,因为它有3个X。所以我几乎已经明白了这一点,但我的问题是,在某些情况下,它并没有计算一些X。例如:

_XX
XXX
__XX
__XX
__XX
__XX
___X
__X_
如果我在最左上角的X上调用此方法,它将返回4(它不计算最左下角的X,但如果我在最左下角的X上调用此方法,它将返回5。另一个示例:

_XX
XXX
__XX
__XX
__XX
__XX
___X
__X_
现在,它应该返回9,因为第10个X与其他X成对角线,不包括在内

以下是我的方法:

public int sizeGroup(int row, int col) {
    if (!board[row][col]) {
        // the point entered is not at a valid group
        return counter;
    } else if (first) {
        rowInitial = row;
        colInitial = col;
        first = false;
        return sizeGroup(row, col);
    } else {
        if (!visited[row][col]) {
            counter++;
        }
        visited[row][col] = true;

        if (row < board.length - 1 && board[row + 1][col] && !visited[row + 1][col]) {
            return sizeGroup(row + 1, col);
        } else if (row > 0 && board[row - 1][col] && !visited[row - 1][col]) {
            return sizeGroup(row - 1, col);
        } else if (col < board[0].length - 1 && board[row][col + 1] && !visited[row][col + 1]) {
            return sizeGroup(row, col + 1);
        } else if (col > 0 && board[row][col - 1] && !visited[row][col - 1]) {
            return sizeGroup(row, col - 1);
        } else if (isVisitedAround(row,col)) {
            return sizeGroup(rowInitial, colInitial);
        }
        return counter;
    }
}
private boolean isVisitedAround(int row, int col) {
    if (row < board.length - 1 && visited[row + 1][col] && row > 0 && visited[row - 1][col]
            && col < board[0].length - 1 && visited[row][col + 1] && col > 0 && visited[row][col + 1]) {
        return true;
    } else {
        return false;
    }
public int-sizeGroup(int行,int列){
如果(!线路板[行][列]){
//输入的点不在有效组中
返回计数器;
}否则,如果(第一次){
rowInitial=行;
大肠杆菌=col;
第一个=假;
返回大小组(行、列);
}否则{
如果(!访问[行][列]){
计数器++;
}
访问[行][列]=真;
如果(行0和板[row-1][col]&&!已访问[row-1][col]){
返回sizeGroup(第1行,列);
}else if(列0和板[row][col-1]&&!访问了[row][col-1]){
返回sizeGroup(行,列-1);
}否则,如果(在(行、列)周围访问){
返回sizeGroup(行初始值、共初始值);
}
返回计数器;
}
}
私有布尔值IsVisiteAround(int行,int列){
如果(行0&&visted[row-1][col]
&&列<线路板[0]。长度-1和已访问[线路][col+1]&&col>0和已访问[线路][col+1]){
返回true;
}否则{
返回false;
}

您的目标到底是什么?给定一个点,递归计算该点下的X和所有(基数?对角线?)相邻的X?连接的整个X组,但不计算对角线