如何使用模运算符递增和递减整数

时间:2015-12-31 20:14:52

标签: java increment modulo decrement

我试图根据点击增加一个整数。点击发生的方式并不重要,所以我会坚持逻辑。我在Java中这样做,但逻辑应该是相同的。

int index = 0;

// then within the click event
//arrySize holds the size() of an ArrayList which is 10

index = (index + 1) % arrySize;

有了这个逻辑,每次用户点击时,index都会增加1.然后arrySize的模数会导致indexindex匹配时返回0 arrySize

(10%10会使索引回到0)这很好,因为它有点像一个循环,从0到10再回到0,永远不会超过10。

我正在尝试做同样的逻辑,但向后 基于点击的数字将减少数量然后变为0 返回arrySize而不是-1

我如何实现这个逻辑?

4 个答案:

答案 0 :(得分:5)

(index + arraySize - 1) % arraySize

你想做什么。

答案 1 :(得分:2)

从Java 8开始,您可以使用Math.floorMod(x, y)方法。引用它的Javadoc(强调我的):

  

地板模数为x - (floorDiv(x, y) * y)与除数y 的符号相同,且在-abs(y) < r < +abs(y)范围内。

System.out.println(Math.floorMod(-1, 5)); // prints 4

所以你会:

index = Math.floorMod(index - 1, arrySize);

您不能直接-1 % 5,因为这会输出-1 based on how the operator % operates with negatives numbers

答案 2 :(得分:0)

index = arraySize - ((index + 1)%arrySize)

答案 3 :(得分:0)

如果要基于1的索引,请使用此选项。例如,如果您想倒退1月份为1月的月份。

int previous = ((index - 1 - arraySize) % arraySize) + arraySize

结果

index    previous
1        12
2        1
3        2
4        3
5        4
6        5
7        6
8        7
9        8
10        9
11        10
12        11

Example Fiddle