向后滚动圆形阵列

时间:2013-03-17 15:49:05

标签: java circular-buffer

我有一个数组,我想向后滚动它的位置。

我有一个布尔数组,我需要计算一个给定单元格向前和向后的真实数量。

我知道如果N是数组中元素的数量,我可以继续做i =(i + 1)%N。 但是,如果我需要以相反的方式滚动它呢?

提前谢谢。

4 个答案:

答案 0 :(得分:6)

我通常使用i = (i - 1 + N) % N来防止负值。

答案 1 :(得分:1)

应该这样做:

i--;
if (i == -1)
  i = N-1;

或一行:

i = ((i-1 == -1) ? N-1 : i-1);

但噪音的变化可能更好。 相关的if语句版本:

if (i == 0)
  i = N-1;
else
  i--;

相关的1行版本:

i = (i == 0 ? N-1 : i-1)

答案 2 :(得分:1)

i = (i == 0 ? N : i) - 1怎么样?

答案 3 :(得分:1)

int newRightShiftIndex = (curIndex + numOfPositions)%size;
int newLeftShiftIndex = (curIndex +(size-(numOfPositions%size)))%size;
  • curIndex - 是您当前的索引
  • numOfPositions - 要向后或顺时针移动的位置数
  • size - 数组的长度、大小