![](/img/trans.png)
[英]How to flip all the bits in Java BitSet while preserving its length
[英]Does BitSet flip() affect the length of BitSet?
在下面的函數中,我想基於突變概率對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 flip()是否會影響BitSet的長度?
是
用於BitSet::length
Javadoc說:
public int length()
返回此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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.