所以我有一个长度为4的数组。当我将它递增1并且数字大于数组的长度时,我希望它能翻转。
例如:
current_index = 3;
current_index++;
//current_index is now 0 again
current_index = 3;
current_index += 2;
//current_index would be 1
current_index = 0;
current_index--;
//current_index would be 3
我目前正在用if-else像这样解决它
if (current_index == textviewlist.length + 1)
current_index = 0;
else if (current_index == textviewlist.length + 2)
current_index = 1;
else if (current_index == -1)
current_index = 3;
但我觉得这不是一个合适的解决方案或“好”的代码。
编辑:我尝试了你的建议,但显然java的行为与负数一样奇怪。 当我尝试
current_index = (current_index - 1) % textviewlist.length;
Java取索引“0”,将其减1(“ - 1”)然后
-1 % 4 = -1
我预计它会是3,请参阅Wolfram Alpha: -1 mod 4 但显然java%运算符与模运算符不同?
编辑2 :我在这里找到了一个解决方案:Best way to make Java's modulus behave like it should with negative numbers? - Stack Overflow
我可以这样做:
current_index -= 1;
current_index = (current_index % textviewlist.length + textviewlist.length) % textviewlist.length;
答案 0 :(得分:6)
您可以使用模运算符。
current_index = (current_index + n) % 4;
答案 1 :(得分:4)
您可以按如下方式使用mod:
current_index = (current_index + i) % 4.
答案 2 :(得分:3)
将增量索引除以数组的长度:
current_index = (current_index + n) % textviewlist.length
答案 3 :(得分:2)
在每次增量之后,只需将其设置为模4或更确切地说,列表的长度。
current_index += 2;
current_index %= textviewlist.length;
或合并:
current_index = (current_index + 2) % textviewlist.length;
你也可以这样做:
current_index += n;
while (current_index >= textviewlist.length) {
current_index -= textviewlist.length;
}
虽然如果它不比模运算慢,我会感到惊讶,特别是因为你的列表长度是2的幂。
无论哪种方式,将所有这些封装到increment()
函数中可能是个好主意:
int increment(int old_index, int n) {
return (old_index + n) % textviewlist.length;
}
编辑:啊,我没有意识到你在使用Java。 (我认为C的模运算符模仿负数的数学定义)你找到的解决方案略有改进
int increment(int old_index, int n) {
return (old_index + n + textviewlist.length) % textviewlist.length;
}