Java 向后滚动圆形阵列

Java 向后滚动圆形阵列,java,circular-buffer,Java,Circular Buffer,我有一个数组,我想向后滚动其中的位置 我有一个布尔数组,我需要计算一个给定单元格向前和向后有多少个true 我知道如果N是数组中的元素数,我可以继续做I=(I+1)%N。 但是如果我需要以相反的方式滚动它呢 提前谢谢。这应该可以做到: i--; if (i == -1) i = N-1; i = ((i-1 == -1) ? N-1 : i-1); if (i == 0) i = N-1; else i--; i = (i == 0 ? N-1 : i-1) 或在一行中: i

我有一个数组,我想向后滚动其中的位置

我有一个布尔数组,我需要计算一个给定单元格向前和向后有多少个true

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


提前谢谢。

这应该可以做到:

i--;
if (i == -1)
  i = N-1;
i = ((i-1 == -1) ? N-1 : i-1);
if (i == 0)
  i = N-1;
else
  i--;
i = (i == 0 ? N-1 : i-1)
或在一行中:

i--;
if (i == -1)
  i = N-1;
i = ((i-1 == -1) ? N-1 : i-1);
if (i == 0)
  i = N-1;
else
  i--;
i = (i == 0 ? N-1 : i-1)
但上述噪声的变化可能更好相关if语句版本:

i--;
if (i == -1)
  i = N-1;
i = ((i-1 == -1) ? N-1 : i-1);
if (i == 0)
  i = N-1;
else
  i--;
i = (i == 0 ? N-1 : i-1)
相关的单线版本:

i--;
if (i == -1)
  i = N-1;
i = ((i-1 == -1) ? N-1 : i-1);
if (i == 0)
  i = N-1;
else
  i--;
i = (i == 0 ? N-1 : i-1)
那么
i=(i==0?N:i)-1

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

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

如果i=0,(i-1)%N结果-1