Как преобразовать массив char [] в BitSet - PullRequest
1 голос
/ 23 марта 2011

Я использую эту программу:

private static char[] toCharArray(final BitSet bs){    
    final int length = bs.length();     
    final char[] arr = new char[length];     
    for(int i = 0; i < length; i++){         
        arr[i] = bs.get(i) ? '1' : '0';
    }     
    return arr;
} 

для преобразования BitSet obj в char[] массив. Теперь после внесения некоторых изменений в массив char[] (с добавлением некоторого нуля) я хочу преобразовать его обратно в BitSet obj. Есть ли способ ...

Ответы [ 2 ]

1 голос
/ 23 марта 2011

ну, не знаю, почему вы это делаете, но почему бы не изменить свой метод?

private static BitSet toBitset(final char[] entries){
        final int length = entries.length;
        BitSet bs = new BitSet(length);
        for(int i = 0; i < length; i++){
                bs.set(i, entries[i] == '1');
        }
        return bs;
}

Редактировать: Поскольку кажется, что вы хотели исправить свой метод, есть только один способ заставить его заставитьмассив char определенного размера, но вам нужно знать, сколько нулей вы хотите добавить в конец, поэтому я переписал ваш метод следующим образом:

private static char[] toCharArray(final BitSet bs, int expectedBits){
        if(expectedBits < bs.length()){
            expectedBits = bs.length();
        }
        final char[] arr = new char[expectedBits];
        for(int i = 0; i < expectedBits; i++){
            arr[i] = bs.get(i) ? '1' : '0';
        }
        return arr;
    }

Проблема с использованием растрового изображения, это толькохранит «один», поэтому последняя запись в BitSet всегда будет «один», а длина всегда будет ссылаться на последний «один» в BitSet.

Например:

 BitSet bs = new BitSet();
        for(int i = 0; i < 1000; i++){
            bs.set(i, false);
        }
 System.out.println(bs.length()); 

Распечатывает «0», тогда как

BitSet bs = new BitSet();
bs.set(10001, true); 
System.out.println(bs.length()); 

выводит 10002.

Это может помочь вам (но вам необходимо соответствующим образом отредактировать приведенные выше методы):

class FixedBitSet extends BitSet {

    private int maxLength = 0;

    public int maxLength(){
        return maxLength;
    }

    @Override
    public void set(int bitIndex, boolean value) {
        super.set(bitIndex, value);
        if(bitIndex > maxLength){
            maxLength = bitIndex;
        }
    }

}
0 голосов
/ 15 ноября 2016

Выполнение юнит-теста для выполнения аналогичной задачи. Придумали следующее:

BitSet bs = new BitSet(testArrayChar.length);

for (int y=0; y<testArrayChar.length; y++)
{
    if(testArrayChar[y]=='0')
    {
        bs.set(y, false);
    }
    else if(testArrayChar[y]=='1')
    {
        bs.set(y, true);
    }
}

Может добавить исключение броска, если символ отличен от 0 или 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...