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)抽出されたビットセットの長さが3ではなく6になるようにコードを変更して修正する方法を説明できますか?

4

3 に答える 3

2

javadocから:

この BitSet の「論理サイズ」を返します。BitSet 内の最高セット ビットのインデックスに 1 を加えた値です。

長さは、設定されたビットのみをカウントします。

ビットは[0, 0, 1, 0, 0, 0, 0]であり、3 番目以降は false であるため、長さが返されます。

あなたは何もする必要はありません: sizeメソッドを使用した場合は明らかなように、bitSet は問題ありません。

于 2013-05-06T06:29:21.337 に答える