我正试图使用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;
}
您的代码中有两个问题。
- 在循环边界中出现一个错误。CCD_ 2索引为零。所以你应该从
b.length() - 1
开始,计算到i >= 0
或更好,但不要试图打破常规,而是做通常的for (int i = 0; i < b.length(); i++)
- 您的索引计算不包含负数。一个简单的解决方法是在模
(i + b.length() - amount) % b.length()
之前添加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;