簡體   English   中英

如何使BitSet不簡化[JAVA]

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM