2011-02-12 4 views
1

"iter"라는 이터레이터와 "database"라는 arraylist를 이미 만들었습니다. 나는 arraylist를 들여다보고 arraylist의 어떤 요소가 "test"라는 String과 같은지보기 원합니다. 그렇다면 다른 요소에 요소를 추가하고 싶습니다.Java iterator를 단계별로 실행하는 데 도움이 필요합니다.

while(iter.hasNext()) { 
    if(database.next() == test) { 
     database.next().add(another_list); 
    } 
} 

내가 뭘 잘못하고 있니? 나는 자바의 반복자에 완전히 익숙하지 않다. 내 자신의 반복기 클래스를 작성해야합니까? 모든 코드 예제는 크게 감사하겠습니다. 덕분에

답변

2

코드에 문제가있을 때마다 .next()으로 전화 할 때마다 반복기가 다음 위치로 진행됩니다. 이것은 의도 한대로 database.next()에 대한 첫 번째 호출이 database.next()에 두 번째 호출과 같은 값을 돌려주지 않을 것이기 때문에이 코드

if(database.next() == test) { 
    database.next().add(another_list); 
} 

가 작동되지 않습니다. 여기에서 볼 수 있듯이이 문제를 해결하려면, 당신은 새 값에 개최하는 임시 변수를 만들고 싶어합니다 :

while(iter.hasNext()) { 
    /* type */ curr = iter.next(); 
    if(curr == test) { 
     curr.add(another_list); 
    } 
} 

이 ( /* type */ 대신에 걸쳐 반복되고 있는지의 실제 형태로 작성)

그러나 많은 경우 iterator를 명시 적으로 사용할 필요가 없습니다. 컬렉션 유형의 대부분은 그냥이 도움이

/* container */ c; 
for(/* type */ curr: c) { 
    if(curr == test) { 
     curr.add(another_list); 
    } 
} 

희망을 기록 할 수있는 경우에 Iterable 인터페이스를 구현!

+0

* 코드의 문제는 .next()를 호출 할 때마다 반복기를 다음 위치로 전달한다는 것입니다. * 당연히 ** a * * 문제. 또한, 추가는 거꾸로됩니다 :'another_list.add (curr)'이어야합니다. foreach 루프 구문은 "in"이 아닌'for (Type var : col)'입니다. –

+0

@ Mark Peters- 모든 유형 정보가 없으면 정확한지 알기가 어렵습니다. 컨테이너는'List' 컬렉션입니까? 또한 잡을 수있어서 고맙습니다./in 사고로 - 방금 고쳤습니다. – templatetypedef

+0

그는 요소를 문자열과 비교하여 같을 가능성이 희박합니다. 어느 쪽이든, 그는 요소에 다른 목록을 추가하지 않고 다른 목록에 요소를 추가하려고한다고 분명히 말했습니다. 나는 모호함을 보는데 어려움을 겪고있다. 어쨌든'Iterator' 초보자들 사이에 공통적 인 두 가지 "다음"호출을 잡았 기 때문에 upvoted. –

2
if(database.contains("test")) 
{ 
    another_list.add("test"); 
} 
  1. 당신은 이미에 존재하는 방법이 경우 javadoc에서
  2. 살펴보고 데이터 comparisions을위한 방법에 contains(...)
  3. 사용한다 등호 (...)를 내장 사용할 수 있습니다 귀하의 목적
+0

+1 작업에 적합한 도구 사용. – I82Much

+0

이것은 오해의 소지가 있습니다 - 테스트는 반드시 포스터의 질문에 포함 된 문자열이 아닙니다. 아마도 문자열이 아닌 것으로 수정해야할까요? – nrobey

+1

@nrobey : * "test라는 문자열 ..."* 이제 값이 "test"와 같은지 여부가 유효한 지점입니다. 'database.contains (test)'여야합니다. –

관련 문제