我试图根据点击增加一个整数。点击发生的方式并不重要,所以我会坚持逻辑。我在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
的模数会导致index
在index
匹配时返回0 arrySize
(10%10会使索引回到0)这很好,因为它有点像一个循环,从0到10再回到0,永远不会超过10。
我正在尝试做同样的逻辑,但向后
基于点击的数字将减少数量然后变为0
返回arrySize
而不是-1
我如何实现这个逻辑?
答案 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