Java 如何使用模运算符递增和递减整数
我正在尝试根据单击增加一个整数。点击是如何发生的并不重要,所以我将坚持逻辑。我是用Java做这件事的,但是逻辑应该是一样的Java 如何使用模运算符递增和递减整数,java,increment,modulo,decrement,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; 使用此逻辑,每次用户单击时,索引将增加1。当index匹配arrySize (10%10会使指数回到0
int index = 0;
// then within the click event
//arrySize holds the size() of an ArrayList which is 10
index = (index + 1) % arrySize;
使用此逻辑,每次用户单击时,索引将增加1。当index
匹配arrySize
(10%10会使指数回到0)这很好,因为它有点像一个循环,从0到10,然后回到0,永远不会超过10
我尝试着做同样的逻辑,但是向后
其中,基于单击,数字将递减,然后变为0
返回到arrySize
,而不是-1
我怎样才能达到这个逻辑
(index + arraySize - 1) % arraySize
执行您想要的操作。从Java 8开始,您可以使用该方法。引用其Javadoc(我的重点):
地板模量为x-(floorDiv(x,y)*y)
,与除数y
具有相同的符号,并且在-abs(y)
的范围内
因此,您将有:
index = Math.floorMod(index - 1, arrySize);
您不能直接使用-1%5
,因为这将输出-1
index=arraySize-((index+1)%arryize)如果您想要基于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
是的,我知道我可以用一个简单的if语句来实现,但我想知道是否可以用moduloI来实现。我看这看起来不错,我将尝试一下,让你知道。
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