Целочисленная циклическая итерация Java

При кодировании я нахожу себя делая следующее очень часто:

corner++; 
if(corner == 4) corner = 0;

В любом случае это делается в одной строке?

В этом примере угол должен быть 0, 1, 2, 3, 0, 1, 2, 3, 0....

Ответы

Ответ 1

Вы можете использовать эту короткую и видную строку (Demo):

corner = (corner + 1) % 4;

Или, даже немного короче (Demo):

corner = ++corner % 4;

Ответ 2

Используйте остаток. Это две строки, но чистые.

corner++;
corner %= 4;

Ответ 3

Вы можете сделать это:

corner = ++corner == 4 ? 0 : corner;

Это даст вам возможность назначить что-то еще для переменной corner в случае, если ваш тест corner == 4 не прошел.

Ответ 4

Я использую:

if (++corner == 4) corner = 0;

Ответ 5

Это не так очевидно, но намного быстрее, поскольку деление обычно выполняется медленнее, чем любая побитовая операция.

corner = ++corner & 3;

EDIT: И удивительно, что я обнаружил еще один удивительный способ сделать велосипед - используя смены, и он работает еще быстрее!

corner = ++corner << 30 >>> 30;

И этот трюк работает только при любой мощности 2.

Этот тест показывает все результаты (хотя это javascript, а не java)