Как сделать так, чтобы BitSet не был упрощен [JAVA] - PullRequest
0 голосов
/ 10 ноября 2018

Я использую 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);
     }

Представьте, что битрейт по умолчанию имеет 60 бит, а numFranges = 12 и this.dia.id () = 4. Это сделало бы последние двенадцать битов равными 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 Ответ

0 голосов
/ 10 ноября 2018

Вот документация для 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());
    }
}
...