我正在尝试使用BitSet在Java语言中创建一个使用wrap进行左移的方法,但我不知道如何让它进行wrap。现在,我的方法只删除了第一位,并保留了其余的位,而没有将第一位添加到末尾。
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;
}发布于 2016-05-13 08:44:26
你的代码中有两个问题。
循环边界中的
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;https://stackoverflow.com/questions/37199396
复制相似问题