I have an array of Booleans like this:
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}};
What I want to do is make a HashMap connecting each point in the array to a HashSet containing the set of all points it is adjacent to that are also true. For example, x[1][0] should lead to an empty set because it is false. However, x[2][2] would contain a set containing {2, 3} because both {2, 2} and {2, 3} are true.
Here is my code so far.
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);
}
}
However, when I ran the code, graph
only contained the point {8, 9}
. Can you find what the flaw in my code is?