从布尔数组(Java)中获取字典

时间:2017-05-19 23:50:49

标签: java arrays

我有一系列像这样的布尔人:

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}。你能找到我代码中的缺陷吗?

0 个答案:

没有答案