gpt4 book ai didi

java - 使用递归检查周围的单元格

转载 作者:行者123 更新时间:2023-12-02 09:19:06 25 4
gpt4 key购买 nike

我正在解决一个问题,其中给定一个二维数组,该数组预先填充了 'o' 和空格字符。我有一个循环遍历 2D 数组,一旦遇到 'o',它应该调用一个递归方法,该方法将递归地查找周围的单元格(上、下、左或右) ,而不是对角线),也是 'o',并且它将为所有连接单元格提供相同的标签。

我现在的代码是有问题的,因为它只会检查周围的 1 个单元格,因为我不确定如何设置递归调用。

public class NameGroups {


public static void main(String[] args) {
char population[][] = {
{'o','o','o',' ',' ',' ',' ',' ',' ',' '},
{'o','o','o',' ',' ',' ',' ',' ','o','o'},
{'o','o',' ',' ',' ',' ',' ',' ',' ',' '},
{' ','o',' ',' ',' ',' ',' ',' ',' ',' '},
{' ','o',' ',' ',' ','o',' ',' ',' ',' '},
{' ',' ',' ',' ',' ','o','o',' ',' ',' '},
{' ',' ',' ',' ',' ','o',' ',' ',' ',' '},
{' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
{'o','o',' ',' ',' ',' ',' ',' ',' ',' '},
{'o','o',' ',' ',' ',' ',' ',' ',' ',' '}
};
int groups = numberOfGroups(population);
for (char[] line : population) {
for (char item : line) {
System.out.print(item);
}
System.out.println();
}
System.out.print("There are " + groups + " groups.");
}

public static int numberOfGroups(char[][] population) {
int numGroups = 0;
char name = '1';

for(int row = 0; row < population.length; row++) {
for(int col = 0; col < population[row].length; col++) {
if(population[row][col] == 'o') {
nameGroups(population, name++, row, col);
numGroups++;
}
}
}

return numGroups;
}

private static boolean nameGroups(char[][] population, char name, int row, int col) {
if (population[row][col] == 'o') {
population[row][col] = name;
}

if(checkBounds(population, row + 1, col)) {
if (population[row + 1][col] == '*') {
return nameGroups(population, name, row + 1, col);
}
}

if(checkBounds(population, row - 1, col)) {
if (population[row - 1][col] == '*') {
return nameGroups(population, name, row - 1, col);
}
}

if(checkBounds(population, row, col + 1)) {
if (population[row][col + 1] == '*') {
return nameGroups(population, name, row, col + 1);
}
}

if(checkBounds(population, row, col - 1)) {
if (population[row][col - 1] == '*') {
return nameGroups(population, name, row, col - 1);
}
}

return true;
}

private static boolean checkBounds(char[][] population, int row, int col) {
if(row < 0) {
return false;
} else if(col < 0) {
return false;
} else if(row >= population.length) {
return false;
} else if(col >= population[row].length) {
return false;
}

return true;
}

}

预期的输出是:

        1,1,1, , , , , , , 
1,1,1, , , , , ,2,2
1,1, , , , , , , ,
,1, , , , , , , ,
,1, , , ,3, , , ,
, , , , ,3,3, , ,
, , , , ,3, , , ,
, , , , , , , , ,
4,4, , , , , , , ,
4,4, , , , , , , ,

我的代码的问题是它将遍历 if 语句并找到一个邻居并返回该单元格。它不会返回并返回其他周围的单元格。我不确定如何处理这个递归问题。我也不确定递归方法应该使用什么数据类型。

最佳答案

您将在每个 if 语句中返回。您想要做的是,如果您有一个相邻单元格,请检查所有 4 个 if 语句。您应该在每个 if 语句中调用 nameGroups() 但不返回。当递归调用返回时,这意味着单元格完成了递归,因此您应该继续并检查其他方向。

解决方案:将所有 4 个 return nameGroups(...) 更改为 nameGroups

试试这个

至于返回类型,它总是 true,因为没有 return false 语句,并且您不检查返回类型的 true 或 false,因此它可以作为 void 方法逃脱

关于java - 使用递归检查周围的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58806847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com