我正在尝试使用有关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
我想获得一个可以表示为的bitset数组 011101,001110,110110,001111,000001,000100
答案 0 :(得分:7)
你的问题是对增强的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();
}
答案 1 :(得分:3)
在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();
}
答案 2 :(得分:1)
您正在将新创建的对象分配给临时变量x
尝试下面的内容..
int i=0;
for (BitSet x:bs)
{
x = new BitSet();
bs[i++] = x; //This will initialize the array elements
}