![](/img/trans.png)
[英]Why am i getting a NullPointerException when trying to save an entity to a list?
[英]Why, when trying to populate an array, am I getting a NullPointerException?
我正在尝试使用有关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中,“ 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();
}
您的问题是您没有分配回数组,并且无法通过“ foreach”构造来实现。 您必须使用普通的“ for”循环:
for (int i = 0; i < bs.length; i++) {
bs[i] = new BitSet();
}
您正在将新创建的对象分配给一个临时变量x
尝试以下类似的方法。
int i=0;
for (BitSet x:bs)
{
x = new BitSet();
bs[i++] = x; //This will initialize the array elements
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.