Сравнение элементов в круговом массиве (Java) - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь сформулировать цикл for, который будет принимать массив, например, из 5 элементов, и позволит мне обрабатывать a[0], как если бы оно было после a[4], и a[4], как если бы оно было раньшеa[0].

Я не могу изменить массив, и он хранит поток в каждом элементе, поэтому я бы предпочел сделать его как можно более простым, чтобы не повредить содержимое потока (потоки синхронизируются и используют reentrantlock- так что вопрос только о массиве).

Я хочу сделать этот простой цикл for:

for (int i = 0; i < ARRAYSIZE; i++)

, чтобы позволить мне обрабатывать его так, как если бы это был циклический массив.Я думал об использовании операции мудоло для достижения этой цели, но это тоже не работает.вот что я попробовал:

for (int i = i+1 % n; i < ARRAYSIZE; i++)

но это не сработает.В основном я пытаюсь проверить, больше ли array[i] чем array[i+1] или array[i-1].

был бы признателен за вашу помощь.

1 Ответ

1 голос
/ 19 сентября 2019

Используйте оператор modulo для переменной цикла i по размеру массива:

public static void main(String [] args) {

    int [] arr = {1, 5, 4, 3, 3, 4, 3, 1};
    int ARRAYSIZE = arr.length;

    for (int i = 0; i < ARRAYSIZE; i++) {
        int index = i % ARRAYSIZE;
        int indexUpper = (i + 1) % ARRAYSIZE;
        //access array using index
        if (arr[index] == arr[indexUpper]) {
            System.out.format("Elements %d and %d are equals.\n", index, indexUpper);
        }
    }
}

Обратите внимание, что для верхнего значения, которое вы хотите циклически пройти, вам нужно сделать (i + 1) % ARRAYSIZE, чтобыубедитесь, что вы получите следующий элемент.Чтобы получить элемент два места, добавьте вместо него 2 или любой другой модификатор, который вы выберете.

Этот тест показывает, как элементы 7 и 0 равны, потому что он циклический.

Выход:

Элементы 3 и 4 равны.

Элементы 7 и 0 равны.

...