Java проблемы с итерацией - PullRequest
       17

Java проблемы с итерацией

1 голос
/ 11 февраля 2012

В настоящее время я пишу программу, которая должна выполнять итерацию в массиве цикла for, который выглядит следующим образом.

List<Integer> currentLevel = new ArrayList<Integer>();
List<Integer> nextLevel = new ArrayList<Integer>();
Iterator<Integer> it = currentLevel.iterator();
currentLevel.add(1);

for(x=0;x<20;x++){
    while(it.hasNext()){
        int element = it.next();
        nextLevel.add(element*2);
        if(element%6 == 4){
            nextLevel.add((element-1)/3);
        }
    }
    currentLevel.clear();
    currentLevel.addAll(nextLevel);
    nextLevel.clear();
}

С этим кодом кажется, что он проходит цикл while только один раз. Это потому, что после первого цикла он добавляет только одно число в массив nextLevel, а массив currentLevel имеет такое же количество индексов, как и раньше? Или это то, что я оставляю вне дома? Если я пытаюсь добавить дополнительные элементы в массив nextLevel после цикла while, это выдает ошибку в строке

int element = it.next();

1 Ответ

3 голосов
/ 11 февраля 2012

Вы входите в цикл for несколько раз, но можете войти в цикл while только при первом проходе через цикл for.

Итератор, it определен внецикл for и назначается только один раз.

При первом цикле for вы вводите цикл while:

while(it.hasNext()){
    int element = it.next();
    ...
}

, который полностью исчерпывает итератор.Каждый последующий раз в цикле for, it.hasNext() ложно, поэтому цикл while ничего не делает.

Вы также пытаетесь повторно использовать nextLevel и currentLevel, но этиназначаются только один раз.Так что currentLevel будет содержать только последний набор элементов, добавленных к nextLevel.

Если я попытаюсь добавить дополнительные элементы в массив nextLevel после цикла while, это выдаст мне ошибку в строке

Возможно, вы получаете исключение одновременной модификации.Вы не можете использовать итератор для списка после его изменения.https://stackoverflow.com/a/1496206/20394 объясняет, как бороться с этими проблемами.

...