-1

所以我正在初始化一个长度为 4 的 Bitset 变量。当我尝试使用 Random 的类 nextBoolean 方法播种这个 Bitset 时。它给出了删除元素的效果。这很可能是我使用 Bitset 的经验不足。但据我了解,Bitset 变量中的每个元素都应该有一个随机的 0 或 1。有人能看出我做错了什么并解释一下吗?

public void seedCandidate()
{
    // Randomly sets bits in the candidate

    for (int i = 0; i < numVals; i++)
        truthVals.set(i, rn.nextBoolean());

}

当我输出位集的长度时,它会给出随机大小。truthVals(Bitset 变量)的长度应该是 4,这是它被实例化的长度,所以它应该是 {0, 1, 2, 3}。但是在从上面的方法播种之后,我得到了这些不同的长度。来自不同的 Bitset 变量。

{1, 2, 3}, {0, 1, 2, 3}, {0}, {0, 2, 3}

4

2 回答 2

2

BitSet-javadoc

  1. public BitSet(int nbits)

    创建一个位集,其初始大小足够大,可以显式表示索引范围为 0 到 nbits-1 的位。所有位最初都是 false

  2. public int length()

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

  3. public int size()

    返回此 BitSet 实际使用的空间位数,以表示位值。

  4. public int cardinality()

    返回此 BitSet 中设置为 true 的位数。

  5. public void set(int bitIndex, boolean value)

    将指定索引处的位设置为指定值。

  6. 当然还有提到的public String toString()......

那么什么是混乱/意外?

于 2019-02-06T10:41:37.743 回答
0

考虑 bitset 一个布尔数组。(当然是一长串位的实现。)

  • set(7, true)将“如果尚未添加,则将 7 添加到集合中。”
  • set(7, false)将“从集合中移除 7(如果已经存在)。”

不幸命名的方法可能会引起混淆:

  • int cardinality()真实元素的数量
  • int size()容量(保留位,“数组大小”)
于 2019-02-06T11:02:57.300 回答