2012-02-11 3 views
1

현재 루프와 arraylist를 반복해야하는 프로그램을 작성 중입니다.반복 문제가있는 Java 문제

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 배열은 이전과 같은 양의 인덱스를 가지니까? 아니면 내가 빠져 나가는 것입니까? 내가 while 루프 후 nextLevel 배열에 추가 요소를 추가하려고하면 그것은 당신이 for 루프를 여러 번 입력하는

int element = it.next(); 
+0

"숫자"란 무엇입니까? –

+0

이 코드는 무엇을하려고합니까? 무엇을하려고하는지 알지 못하면 코드가 어떻게 보이는지 알 수 없습니다. – ams

+0

나는 수학 프로젝트를 위해 Collatz 웹을 만들려고 노력하고 있는데, 어떤 코드가 보이길 원한다면 http://stackoverflow.com/questions/9186198/java-reverse-collatz-web#comment11558888_9186198 – coopf

답변

3

라인에서 나에게 오류를 제공하지만, 첫 번째에 while 루프를 입력 할 수 있습니다 for 루프를 통과하십시오.

반복자 itfor 루프 외부에 정의되어 있으며 한 번만 할당됩니다. 완전히 반복자를 배출

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

:

for 루프를 통해 처음으로 당신은 while 루프를 입력합니다. 그 이후의 모든 시간은 for 루프, it.hasNext()은 거짓이므로 while 루프는 아무 작업도 수행하지 않습니다.

또한 nextLevelcurrentLevel을 다시 사용하려고하지만이 값은 한 번만 지정됩니다. 따라서 currentLevel에는 nextLevel에 추가 된 마지막 요소 집합 만 포함됩니다.

내가 선

당신은 아마 동시 수정 예외를 받고에서 그것은 나에게 오류를 제공 while 루프 후 nextLevel 배열에 추가 요소를 추가하려고하면

. 목록을 수정 한 후에는 이터레이터를 사용할 수 없습니다. https://stackoverflow.com/a/1496206/20394은 이러한 문제를 해결하는 방법을 설명합니다.