Я пытаюсь увеличить целое число на основе щелчка. Как происходит щелчок, не имеет значения, поэтому я буду придерживаться логики. Я делаю это на 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 соответствует {{X4 }}

(10% 10 вернет индекс обратно к 0) Что хорошо, потому что это похоже на цикл, который идет от 0 до 10, затем обратно до 0 и никогда не превышает 10.

Я пытаюсь использовать ту же логику, но наоборот где в зависимости от щелчка число будет уменьшаться до 0, затем возвращается к arrySize вместо -1

Как мне достичь этой логики?

5
Lucas Santos 31 Дек 2015 в 23:14

4 ответа

Лучший ответ
(index + arraySize - 1) % arraySize

Делай что хочешь.

6
Louis Wasserman 31 Дек 2015 в 20:19

Используйте это, если вы хотите индексацию на основе 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

Пример скрипки

0
xr280xr 10 Сен 2020 в 14:17

Index = arraysize - ((index + 1)% arrrysize)

0
Toni Pujol 31 Дек 2015 в 20:36

Начиная с 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 в зависимости от того, как оператор % работает с отрицательными числами.

2
Community 23 Май 2017 в 12:09