Есть ли алгоритм для перебора ArrayList по кругу? - PullRequest
0 голосов
/ 10 октября 2019

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

Ответы [ 3 ]

1 голос
/ 10 октября 2019

Да, есть:

Рассмотрим следующий код:

for (int i = 0; i < 100; i++) {
   // Output will be: 0,1,2,3,4,5,6,7;0,1,2,3,4,5,6,7;...
   System.out.println(i % 8);
}
0 голосов
/ 10 октября 2019

Если вы объявили и заполнили ArrayList, который я назову list, то вы просто выполняете итерацию по модулю размера списка. Как именно это написать, зависит от того, что вы хотите сделать.

1) Продолжайте идти вечно, по кругу:

int index = 0;
while (true) {
    value = list.get(index);
    … process value here …
    index = (index + 1) % list.size();
    // or equivalently to previous line: if (++index >= list.size) index = 0;
}

2) Циклически просматривайте список ровно один раз, но начинайте с произвольногоpoint base:

for (int offset = 0; offset < list.size(); offset++) {
    int index = (base + offset) % list.size();
    value = list.get(index);
    … process value here …
}

и так далее ...

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

0 голосов
/ 10 октября 2019

Попробуйте это:

ArrayList<Object> list = new ArrayList<>(); // + add some values to the list

for (int i = 0; i < list.size(); i++) {
    someMethod();
    if (some condition) {
        break; // you need to add some break condition, otherwise, this will be an infinite loop
    }
    if (i == list.size() - 1) {
        i = -1;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...