1

私は過去数日からこのことを探していて、「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[] なども試してみましたが、うまくいきませんでした。

概念的な部分に愚かなことが欠けていることは知っていますが、もし皆さんが私を助けてくれれば、非常に感謝しています.

4

1 に答える 1

2

質問のコード スニペットは、key変数の複数の値を処理するループ内にあるようです。現在の反復の前に設定したすべてのビットが、ループを通過するときに現在の反復中に使用できることを期待しています。

この問題に対処するには、ステートメントBitSetを実行するたびにオブジェクトを作成するのではなく、ループに入る前にオブジェクトを作成し、再利用し続ける必要があります。if

この行を移動

BitSet bitSet1 = new BitSet(256);

スニペットで暗示されているループの外側に移動するか、クラス内の変数にして問題を修正してください。

于 2013-08-27T13:05:00.600 に答える