2012-12-05 2 views
-1

내 코드 :예기치 않은 출력

Object tempDifference; 
Object testUser; 
testUser = users.get(0); 
it8 = difference_time.iterator(); 
it9 = users.iterator(); 
Object tempUser; 
tempDifference = difference_time.get(0); 

while (it9.hasNext()) { 
    tempUser = it9.next(); 
    System.out.println(testUser+" "+tempUser); 
    if (testUser.equals(tempUser)) { 
    times.add(tempDifference); 
    testUser = tempUser; 
    } else { 
    times.add(value); 
    testUser = tempUser; 
    } 
    tempDifference = it8.next(); 
} 
  • 입력은 다음과 같습니다 1 2 2

  • 출력은 다음과 같습니다 1 1

  • 내가 출력 1 2

을 원하는

시작 부분에 잘못된 출력 1 1이 나타나는 이유는 무엇입니까?

+0

아아 아아, 좋은 오래된 숙제 : – evilone

+4

SO에 코드를 게시하면서 영어 단어를 사용하세요. 변수 이름을 구별하기가 어려워집니다. 그리고 관련된 모든 코드를 게시하십시오. 사용중인 목록의 선언 및 초기화를 게시하지 않았습니다. –

+0

그 코드는 끔찍한 것 같습니다. 청소하고 누락 된 부품을 추가하십시오. – Uli

답변

1

대부분의 반복기가 첫 번째 요소보다 먼저 시작되므로 next()를 처음 호출하면 두 번째 요소가 아닌 첫 번째 요소로 이동합니다.

그래서, 만약 사용자 = {1, 2}, 다소 내려 끓는 :

//set test = 1, the first entry in the list 
test = users.get(0); 
//get a new iterator, starting before the first element 
it9 = users.iterator(); 
// move to first element (the next one), so temp == 1 
temp = it9.next(); 
// print values "1 1" 
System.out.println(test+" "+temp); 
+0

그렇게하지 않으려면 어떻게해야합니까? – Majkl

+1

그게 어떻게 작동하는지 ... 그냥 it9.next()를 호출 한 후 바로 호출하여 첫 ​​번째 항목으로 이동 한 다음 루프 내의 next()를 호출 한 다음 두 번째 항목을 반환합니다. 목록에. – femtoRgon