Установка случайного индекса битов в логическом массиве (Java)

Я искал эту вещь последние пару дней и наткнулся на наиболее рекомендуемое решение с использованием «метода BitSet». Я попробовал то же самое, чтобы установить индекс бита и отобразить его с помощью метода get.

Вот мой код:

int value = (myMap.get(key));  // value could be anything from 0-255

if (items.contains(key)) {
    BitSet bitSet1 = new BitSet(256);

    bitSet1.set(value);
    System.out.print(bitSet1);

    for (int i5 = 1; i5 < bitSet1.size(); i5++) {
        boolean bit =  bitSet1.get(i5);
        System.out.print(bit?1:0);
    }
}

Проблема в том, что в соответствии с операцией пользователя может быть любое значение от 0 до 255, например: 40,85,93.

Я хочу установить соответствующий битовый индекс в логическом массиве. Приведенный выше код устанавливает соответствующий индекс бита равным «1», но если индексов больше 1, то же количество логических массивов печатается с соответствующим битом.

Я хочу напечатать индексы битов до «1» (согласно целочисленным индексам в «значении») в том же логическом массиве.

Я также играл с arraylist, int[] и т. д., но не смог добиться успеха.

Я знаю, что в концептуальной части не хватает какой-то глупости, но если бы вы, ребята, могли мне помочь, я был бы очень благодарен.


person user2132007    schedule 27.08.2013    source источник
comment
Не могли бы вы немного пояснить свой вопрос? О каких логических массивах вы говорите? Каким именно вы хотите получить конечный результат/выход?   -  person Tom McIntyre    schedule 27.08.2013
comment
dasblinkenlight написал 2 отличных ответа. Если они не помогают, вы должны опубликовать короткий, но полный пример, содержащий ваш код, ввод, ожидаемый вывод и фактический вывод, см. SSCCE, чтобы мы могли вам помочь.   -  person jlordo    schedule 27.08.2013
comment
@Tom McIntyre Я хочу установить логический массив, содержащий 0, на 1 в соответствии со значением индекса, предоставленным пользователем.   -  person user2132007    schedule 27.08.2013


Ответы (1)


Похоже, что фрагмент кода из вашего вопроса находится внутри цикла, который просматривает несколько значений переменной key, ожидая, что все биты, которые вы установили до текущей итерации, будут доступны во время текущей итерации по мере прохождения цикла.

Чтобы решить эту проблему, вам нужно создать объект BitSet перед входом в цикл и продолжать использовать его повторно, вместо того, чтобы создавать его каждый раз, когда вы выполняете оператор if.

Переместить эту строку

BitSet bitSet1 = new BitSet(256);

за пределами цикла, который подразумевается в вашем фрагменте, или сделайте его переменной в своем классе, чтобы решить проблему.

person Sergey Kalinichenko    schedule 27.08.2013
comment
Приведенное выше предложение действительно решает проблему до определенной степени. Поскольку я предоставляю более 1 значения для примера: - 40,55,85, тогда bitset1 содержит: - {40}{40,55}{40,55,85}, я просто хочу использовать: - {40,55,85} Я пытаюсь понять это. Но спасибо большое. - person user2132007; 27.08.2013
comment
@user2132007 user2132007 Если вы хотите использовать окончательную битовую конфигурацию, подождите, пока не закончится цикл, чтобы использовать ее. В настоящее время вы печатаете его после каждой итерации, поэтому шаблон появляется там постепенно. - person Sergey Kalinichenko; 27.08.2013
comment
Я получил идею. Спасибо - person user2132007; 27.08.2013