我有一系列像这样的布尔人:
boolean[][] x =
{{true, true, false, true, true, true, false, true},
{false, true, false, false, true, false, false, false},
{true, false, true, true, true, false, true, true},
{true, false, false, false, false, true, true, false},
{false, true, false, true, true, false, true, false},
{false, true, false, true, false, true, false, false},
{true, true, false, false, false, false, false, false},
{true, false, false, false, false, false, false, false},
{false, true, true, false, true, true, true, true}};
我想要做的是让一个HashMap将数组中的每个点连接到一个HashSet,其中包含与其相邻的所有点的集合,这也是真的。 例如,x [1] [0]应该导致空集,因为它是假的。但是,x [2] [2]将包含一个包含{2,3}的集合,因为{2,2}和{2,3}都是正确的。
到目前为止,这是我的代码。
HashMap<int[], HashSet<int[]>> graph = new HashMap<int[], HashSet<int[]>>();
int[] key = new int[2];
for (int i = 0; i < x.length; i++){
for (int j = 0; j < x[0].length; j++) {
key[0] = i;
key[1] = j;
int[] key2 = new int[2];
HashSet<int[]> addSet = new HashSet<int[]>();
if (x[i][j]) {
if (i > 0) {
key2[0] = i-1;
key2[1] = j;
if (x[i-1][j]) addSet.add(key2);
}
if (i < x.length - 1) {
key2[0] = i+1;
key2[1] = j;
if (x[i+1][j]) addSet.add(key2);
}
if (j < x[0].length - 1) {
key2[0] = i;
key2[1] = j+1;
if (x[i][j+1]) addSet.add(key2);
}
if (j > 0) {
key2[0] = i;
key2[1] = j-1;
if (x[i][j-1]) addSet.add(key2);
}
}
graph.put(key, addSet);
}
}
但是,当我运行代码时,graph
仅包含点{8, 9}
。你能找到我代码中的缺陷吗?