Java位集奇怪的行为
根据,应打印以下代码Java位集奇怪的行为,java,bitset,Java,Bitset,根据,应打印以下代码6。但是,它输出3,没有明显的原因 import java.util.*; public class BitSetStrangeness{ public static void main(String[] args){ BitSet foo = new BitSet(); int[] arbitrary = new int[] { 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0
6
。但是,它输出3
,没有明显的原因
import java.util.*;
public class BitSetStrangeness{
public static void main(String[] args){
BitSet foo = new BitSet();
int[] arbitrary = new int[] {
0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1
};
for (int i = 0; i < arbitrary.length; i++)
if (arbitrary[i] == 1) foo.set(i);
else foo.clear(i);
System.out.println(foo.get(15,21).length());
}
}
import java.util.*;
公共类位转换{
公共静态void main(字符串[]args){
BitSet foo=新的位集();
int[]任意=新int[]{
0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1
};
for(int i=0;i
有人能解释a)我为什么会看到这种行为,b)我如何修改代码以修复它,从而使提取的位集长度为6而不是3吗?来自:
返回此位集的“逻辑大小”:位集中最高集位的索引加上一
长度仅计算设置的位
位是[0,0,1,0,0,0,0,0]
,在第三个位之后为false,因此返回长度
您无事可做:您的位集很好,如果您使用了该方法,就会很清楚。为什么它应该返回
6
?让我们看看:
foo.get(15,21)
返回单词equals4
。在二进制表示中,它只是100
length()的javadoc
方法BitSet
类:
100
:设置的最高位是2
(从0
开始计算),加上一位将是3
。一切都是正确的。Javadoc for,says返回此位集的“逻辑大小”:位集中最高集位的索引加上一。如果位集不包含设置位,则返回零
在您的例子中,
foo.get(15,21)
给出了一个位集
:[0,0,1,0,0,0]
。因此结果是2+1=3
谢谢你的回答。我试图将一个位集视为一个位字符串,我希望带有fromIndex和toIndex的get
函数的行为类似于子字符串函数。