[英]How to make BitSet to be not simplified [JAVA]
我使用BitSet来表示填写讲座的可能时间,例如,当你将角落位置为false时 ,它们被简化,这意味着它们不再是BitSet中的。 我怎么能要求BitSet不简化?
为了使我的解释更清楚,这是代码:
for(Map.Entry<GrupAssig, BitSet> entry : bitsetPerGrup.entrySet()){
BitSet bitset = entry.getValue();
//n franges per dia
int numFranges = UnitatDocent.getNumFranges();
int indexDia = this.dia.id() * numFranges;
bitset.clear(indexDia, indexDia+numFranges);
}
想象一下,默认情况下bitset有60位,numFranges = 12,this.dia.id()= 4。 这将使最后12位设置为0.我得到的结果是:
111111111111111111111111111111111111111111111111
但如果this.dia.id()= 3我得到:
11111111111111111111111111111111111100000000000011111111111
你可以这样打印BitSet:
public static void printBitset(BitSet b) {
StringBuilder s = new StringBuilder();
for( int i = 0; i < b.length(); i++ )
{
s.append( b.get( i ) == true ? 1 : 0 );
}
System.out.println( s );
}
这说明了我在说什么。
谢谢。
这是BitSet.length的文档:
length()
Returns the "logical size" of this BitSet: the index of the highest set bit in the BitSet plus one.
如果需要打印出一定数量的位(例如60),那么为循环使用常量而不是“.length()”。 无论长度如何,您都可以在任何索引上调用“.get(index)”,它将为您提供该位的结果。
例如,以下代码生成“0000011000”:
import java.util.BitSet;
public class Main {
public static void main(String[] args) {
BitSet bits = new BitSet();
bits.set(5);
bits.set(6);
StringBuilder bitString = new StringBuilder();
for (int i = 0; i < 10; i++) {
bitString.append(bits.get(i) ? "1" : "0");
}
System.out.println(bitString.toString());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.