我正在尝试使用有关int数组的信息填充BitSets数组

    //ar is a SIZE*SIZE 1-D int array, SIZE is a constant

    //decare BitSet array
    BitSet bs[] = new BitSet[SIZE];

    //initialize BitSet array
    for (BitSet x:bs)
        x = new BitSet();

    //populate BitSet array
    for (int i = 0 ; i < ar.length ; i++)
        if (ar[i] > 0)
            bs[(i/SIZE)].set(SIZE-(i%SIZE));


最后一行似乎是问题所在,但我看不出逻辑有什么问题。有任何想法吗?

为了更清楚一点,如果我有一个像
0,3,4,5,0,1,0,0,1,2,7,0,2,3,0,3,2,0,0,0,2,1,5,8,0, 0,0,0,0,1,0,0,0,6,0,0

我想要一个可以表示为的位集数组
011101,001110,110110,001111,000001,000100

最佳答案

您的问题是对增强的for循环缺乏了解。基本上:

for (BitSet x:bs)
    x = new BitSet();


只是一块糖。编译器将其扩展为以下内容:

for (int i = 0; i < bs.length; i++) {
    BitSet x = bs[i];
    x = new BitSet();
}


在此扩展中,很明显,您只是将新位集分配给x并将其丢弃。您实际上根本没有修改数组。您需要按以下方式初始化数组:

for (int i = 0; i < bs.length; i++) {
    bs[i] = new BitSet();
}

关于java - 为什么在尝试填充数组时出现NullPointerException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13413605/

10-15 00:11