1

基于Javadoc,应打印以下代码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());
    }
}

谁能解释a)为什么我看到这种行为和b)我如何修改代码来修复它,以便提取的Bitset长度为6而不是3?

4

3 回答 3

2

javadoc

返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加一。

长度只计算设置的位。

这些位是[0, 0, 1, 0, 0, 0, 0],在第三个之后为假,因此返回长度。

你无事可做:你的 bitSet 很好,如果你使用了size方法就会很清楚。

于 2013-05-06T06:29:21.337 回答
0

为什么它应该返回6?让我们来看看:

  1. foo.get(15,21)返回单词等于4。在二进制表示中,它只是100.

  2. 让我们阅读类javadoclength()方法BitSet

返回此 BitSet 的“逻辑大小”:BitSet 中最高设置位的索引加一。如果 BitSet 不包含设置位,则返回零。

Ok, we can now check it for 100: the highest set bit is 2 (counting from 0), plus one it will be 3. Everything is correct.

于 2013-05-06T06:30:48.123 回答
0

BitSet#length()的Javadoc表示返回此 BitSet 的“逻辑大小”:BitSet中最高设置位的索引加一。如果 BitSet 不包含设置位,则返回零。

在你的情况下,foo.get(15,21)给出一个BitSet: [0, 0, 1, 0, 0, 0, 0]。因此结果是2+1=3

于 2013-05-06T06:31:21.720 回答