2013-08-27 28 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