繁体   English   中英

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

[英]How can I increment and decrement an integer with the modulo operator

我正在尝试根据点击增加一个整数。 点击如何发生并不重要,所以我会坚持逻辑。 我在 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匹配arrySize时回到0

(10 % 10 会使索引回到 0)这很好,因为它有点像从 0 到 10 然后回到 0 并且永远不会超过 10 的循环。

我正在尝试执行相同的逻辑但是向后,根据点击数字将递减并达到 0 然后返回到arrySize而不是-1

我怎样才能实现这个逻辑?

(index + arraySize - 1) % arraySize

做你想做的事。

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

floor 模数是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

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

如果您想要基于 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

示例小提琴

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM