确定所有相等的值&在2D阵列中彼此相邻

时间:2014-12-12 06:59:46

标签: java arrays

我是stackoverflow的新手以及编程,如果我对这个问题的讨论很差,请原谅我。

所以说我有一个2到D的数组,其整数值从1到4.它可能看起来像这样:

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

让我重写它,以便我可以隔离我希望我们观察的数组的一部分:

x x x x x x x x x x
x x x x x x x x x x
x x x x x 3 3 x x x
x x x x 3 3 x x x x
x x x x x 3 3 x x x 
x x 3 3 3 3 3 3 x x
x x x 3 3 x x x x x
x 3 3 3 x x x x x x

我们看到这里显示的3不仅价值相同,而且直接"在"旁边。彼此并且都是“连接”#34;。

我有4种方法可以确定数组中空格的右边,左边,顶部或底部的空格是否等于给定的起始位置:

boolean isEqualRight(int row, int column) {
    return array[row][column] == array[row][column + 1];
}
boolean isEqualLeft(int row, int column) {
    return array[row][column] == array[row][column - 1];
}
boolean isEqualUp(int row, int column) {
    return array[row][column] == array[row - 1][column];
}
boolean isEqualDown(int row, int column) {
    return array[row][column] == array[row + 1][column];
}

但是,即使我知道阵列中的位置是否相等并且在起始位置旁边,我也无法想出一个解决方案来确定阵列中所有位置相等并连接到启动。

我尝试开发一个循环,循环通过起始3旁边的空格,确定它是否是下一个并且等于它,如果是,那么对它旁边的3做同样的事情,依此类推,等等。但是当我们开始分支时,我遇到了一个问题。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这是计算机图形学中的标准问题。该算法称为Flood Fill,详见Wikipedia

如果你想研究一个(只是谷歌),那里还有许多Java实现。

答案 1 :(得分:0)

您的方法似乎正确但您应该添加来代码以捕获任何可能的IndexOutOfBoundErrors。例如,如果您获取数组中的第一个元素并检查或向左检查将得到一个IndexOutOfBound错误,因为它将引用一个不存在的元素,这适用于所有边界元素。这将阻止您的代码高效运行。

在处理数组时总是要考虑的事情。