BitSet flip()会影响BitSet的长度吗?

时间:2016-07-23 20:08:07

标签: java

在以下函数中,我想根据变异概率改变BitSet。

public static Cell mutate(Cell original_){

    Double mProb = 0.2;

    BitSet original = new BitSet(original_.getChrom().size());

    original = (BitSet) original_.getChrom().clone();

    Random rand = new Random();
    System.out.print(" " + original.length() + " "); //to check the length of original before applying flip()

    for(int m = 0; m < original.length(); m++)
    {

        if(rand.nextDouble() <= mProb){
            original.flip(m);
        }

    }

    System.out.print(" " + original.length() + " "); //to check the length of original after applying flip()

    Cell mutated = new Cell(original);
    //System.out.print("{" + mutated.getFitness() + "} ");

    return mutated;
}

我注意到的问题是,有时在翻转一些位后BitSet的长度会减少!!

以下一些结果可以解释这个问题:

original before flip || length before flip || original after flip || length after flip
110111               || 6                  || 110111              || 6
101111               || 6                  || 111                 || 3
110111               || 6                  || 10111               || 5
110111               || 6                  || 111111              || 6
111010               || 6                  || 11010               || 5

如你所见,翻转后第一和第四次没有减少。而另一方则减少了。我试图了解导致问题的原因,但我无法理解。我需要的是在翻转之后,bitset应该与翻转之前的原始长度相同。

1 个答案:

答案 0 :(得分:2)

  

BitSet flip()会影响BitSet的长度吗?

BitSet::length的{​​p> Javadoc说:

  

public int length()
  返回&#34;逻辑大小&#34;此BitSet:BitSet中最高设置位的索引加1。如果BitSet不包含设置位,则返回零。

BitSet b = new BitSet();
System.out.println(b.length()); // 0
b.flip(1);
System.out.println(b.length()); // 2
b.flip(1);
System.out.println(b.length()); // 0