我想说,我感谢大家对以下问题的贡献;
我目前正在编程一个数组洗牌器,它将数组的元素洗牌到不同的随机位置,而不改变实例,所以没有必要用返回创建的数组实例(洗牌的调用)重新计算数组字段。我想创建一个替代现有洗牌算法的方法,比如Fisher-Yates洗牌算法,作为实验。所以我尝试了几个手术,但我觉得我卡住了。我可以创建一个存储已经使用的索引的数组,并创建一个尚未使用的随机索引(在我想要洗牌的数组中的每个元素迭代期间)。但我想让它更简洁。因为按位运算可以帮助我,但只是2^x的十六进制数。下面是一个我想要达到的目标和我已经尝试过的例子,但简化了:
//Integer that holds information on what indices are being used
int used = 0;
//Some indices being used
used |= 3;
used |= 4;
used |= 6;
//Check whether the 2, 4 are used
boolean isUsed2 = (used & 2) != 0; //=> false as 2 is not used?
boolean isUsed4 = (used & 4) != 0; //=> true as 4 is used?
所以基本上我不明白的是我如何创建一个整数,它包含了哪些特定的值被使用和哪些没有被使用的信息。因此,要确定索引2或0或8是否已被使用。
希望我的英语是可以理解的
真诚的
你必须右移你的bitMask的索引和位,它与0x1。
public boolean getBitState(int bitIndex, int bitMask) {
return (bitMask >> bitIndex & 0x1) == 0x1;
}
true = 1, false = 0
设置位…
// returns new bitmask value
public int setBitState(int bitIndex, boolean value, int bitMask) {
if (value) {
return bitMask |= (0x1 << bitIndex);
} else {
return bitMask &= ~(0x1 << bitIndex);
}
}