2013-08-27 30 views
1

我過去幾天一直在尋找這個東西,並遇到了使用「BitSet方法」的最推薦的解決方案。 我試圖設置位的索引並使用get方法顯示它。在布爾數組(Java)中設置位的隨機索引

這裏是我的代碼:

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」(按照「value」中的整數索引)。

我玩過arraylist,int []等,但也不能成功。

我知道在概念部分缺少一些愚蠢的東西,但如果你們能夠幫助我,我會非常感激。

+0

你能澄清一下你的問題嗎?你在說什麼布爾數組?你想要什麼最終結果/輸出是什麼? –

+0

dasblinkenlight寫了2個優秀的答案。如果他們沒有幫助,則必須發佈一個簡短但完整的示例,其中包含您的代碼,輸入,預期輸出和實際輸出,請參見[SSCCE](http://sscce.org),以便我們幫助您。 – jlordo

+0

@Tom McIntyre 我想根據用戶提供的索引值設置包含0的布爾數組爲「1」。 – user2132007

回答

2

看起來問題中的代碼片段在一個循環中,該循環包含key變量的多個值,期望在當前迭代之前您設置的所有位在當前迭代期間可用,因爲您正在經歷循環。

要解決此問題,您需要在進入循環之前創建BitSet對象,並繼續重新使用它,而不是每次通過if語句時創建該對象。

移動此行

BitSet bitSet1 = new BitSet(256); 

到在你的代碼片段暗示,或讓它在你的類來解決這個問題的變量外循環。

+0

以上建議確實解決了問題。 因爲我提供了超過1的值,例如: - 40,55,85 那麼bitset1包含: - {40} {40,55} {40,55,85} 我只想使用: - {40,55 ,85} 我想弄明白。 但是,非常感謝。 – user2132007

+1

@ user2132007如果您想使用最後一位配置,請等到循環後再使用它。目前您在每次迭代後都會打印它,因此該模式會逐漸出現。 – dasblinkenlight

+0

我明白了。 謝謝 – user2132007