我正在尝试使用BitSet
创建一个在Java中使用环绕进行左移的方法,但我无法弄清楚如何让它进行环绕。现在我的方法只删除第一位并保留其余位而不将第一位添加到结尾。
public static BitSet leftShift(int amount, BitSet b){
BitSet bit2 = new BitSet(b.length());
for(int i = b.length(); i > 0; i--){
bit2.set((i-amount)%b.length(), b.get(i));
}
return bit2;
}
答案 0 :(得分:2)
您的代码中有2个问题。
BitSet
索引从零开始。因此,您应该从b.length() - 1
开始并计入i >= 0
或更好,但不要试图成为非传统的,而是通常for (int i = 0; i < b.length(); i++)
b.length()
(i + b.length() - amount) % b.length()
醇>
最后,虽然它不是一个bug,但迭代BitSet
的常用方法是使用nextSetBit
而不是遍历所有索引。
总之,它看起来像这样:
BitSet result = new BitSet(b.length());
for (int i = b.nextSetBit(0); i != -1; i = b.nextSetBit(i + 1)) {
int j = (i + b.length() - amount) % b.length(); // new index after wrapping
result.set(j);
}
return result;