Java 为什么在尝试填充数组时,我会得到NullPointerException?

Java 为什么在尝试填充数组时,我会得到NullPointerException?,java,arrays,bitset,Java,Arrays,Bitset,我试图用int数组的信息填充一个位集数组 //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

我试图用int数组的信息填充一个位集数组

    //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));
//ar是一个SIZE*SIZE 1-D int数组,SIZE是一个常量
//十进位数组
位集bs[]=新位集[SIZE];
//初始化位集数组
用于(位集x:bs)
x=新的位集();
//填充位集数组
for(int i=0;i0)
bs[(i/尺寸)]。设置(尺寸-(i%尺寸));
最后一行似乎是问题所在,但我看不出逻辑有任何错误。有什么想法吗

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

我想得到一个可以表示为
011101001111011011011110011001100000100

在java中,您的“foreach”构造的工作原理如下:

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

// is the same as:

for (int i = 0; i < bs.length; i++) {
  BitSet x = bs[i];
  x = new BitSet();
}
for(位集x:bs)
x=新的位集();
//同:
对于(int i=0;i
您的问题是您没有分配回数组,并且没有办法使用“foreach”构造。您必须使用普通的“for”循环:

for (int i = 0; i < bs.length; i++) {
  bs[i] = new BitSet();
}
for(int i=0;i
您的问题是对增强for循环的理解不足。基本上:

for (BitSet x:bs)
    x = new BitSet();
只是一块合成糖。编译器将其扩展为以下内容:

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

您正在将新创建的对象分配给临时变量
x

试试下面的方法

        int i=0;
        for (BitSet x:bs)
            {
                x = new BitSet();
                bs[i++] = x; //This will initialize the array elements
            }

你的初始化技术是错误的。有关详细信息,请查看[此问题][1]。[1] 当前位置甜食又回来咬我了。这是一个非常好的时刻。谢谢。应该是bs[i]而不是bs[i++]?@GangnamStyleOverflowerr他必须以某种方式增加i,因为他在for中没有增加i,所以它要么在数组赋值中需要是i++,要么作为块中的另一行。因为i++是后增量的,所以这段代码可以工作。
        int i=0;
        for (BitSet x:bs)
            {
                x = new BitSet();
                bs[i++] = x; //This will initialize the array elements
            }