2015-12-31 41 views
4

我想基于点击增加整数。点击如何发生并不重要,所以我会坚持逻辑。我在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回到0时index比赛arrySize

(10%10将使该指数回到0)这是伟大的,因为它有点像一个循环,从0到10,然后回到0,从未超过10.

我想要做同样的逻辑,但向后 ,对采用基于点击的数量将递减,并得到0,那么 追溯到arrySize而不是-1

我怎样才能做到这一点的逻辑?

+0

是的,我知道我可以用一个简单的if语句做到这一点,但不知道是否有可能与模 –

回答

4
(index + arraySize - 1) % arraySize 

做你想要的。

+0

伟大的作品,感谢一吨路易斯! –

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,因为这将输出-1based on how the operator % operates with negatives numbers

+0

我确定这看起来不错,即时通讯将尝试这个并让你知道。 –

0

指数= ARRAYSIZE - ((指数+ 1)%arrySize)

+0

这里的逻辑不起作用。 –