为了账号安全,请及时绑定邮箱和手机立即绑定

如何让BitSet不被简化

如何让BitSet不被简化

白衣非少年 2022-01-12 13:51:30
我使用 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 );    }这证明了我在说什么。谢谢你。
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

这是 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());

    }

}


查看完整回答
反对 回复 2022-01-12
  • 1 回答
  • 0 关注
  • 218 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号