2014-04-20 9 views
0

링크 된 목록에 추가 된 항목과 항목을 삭제하는 아래의 방법으로 읽는 프로그램이 있습니다. 현재이 방법은 목록을 통과 한 것으로 보이며 선택한 항목을 찾으면 뿐만 아니라 개별 항목 대신 앞에있는 모든 항목을 삭제합니다. 휴식을 제거; 메서드는 목록의 모든 항목을 제거합니다.자바 - 반복자를 사용하여 연결된 목록에서 요소 제거

LinkedList<Entry> entryList = new LinkedList<Entry>(); 
ListIterator<Entry> entryIterator = entryList.listIterator(); 

public void deleteEntry(int number) { 
    while(entryIterator.hasNext()) { 
     Entry entry = entryIterator.next(); 
     if((entry.getNumber() == number)) { 
       entryIterator.remove(); 
       //break; 
     } 
    } 
} 

나는 그 문제가 다른 곳에서 발생했다는 느낌이 들지만 알아낼 수는 없다. 나는 자바가 처음이다. 감사!

entry.getNumber() == number 

항상 TRUE처럼

+0

나에게 잘 어울립니다. – MightyPork

+0

문제는 아마도 다른 곳에서 발생했을 것입니다. 'number'는 아마도'Entry'의 정적 멤버일까요? – Keppil

+0

여분의 항목이 전혀 제거되지 않는다고 생각합니다. 원래 목록을 검사하는 대신 반복자를 검사하여 자신이 속한다고 생각하도록 속이고 있다고 생각합니다. –

답변

0

은 같은데, 그래서 문제는이 코드를하지만, 다른 곳이 아닙니다.

어쩌면 목록에있는 정적 요소 또는 모든 요소로 정의 된 항목 번호가 동일한 개체입니다.

+0

나는 그 메소드가 올바르게 동작 할 수 있도록 관리 해왔다. 나는 비슷한 일을 반복하면서 iterator를 재설정하는 while 루프를 발견했다. deleteEntry 메소드에 추가하여 이제는 작동한다. 나는 전에 링크드리스트를 사용 해본 적이 없기 때문에 어떻게 고정되었는지, 얼마나 효율적인지 모르겠다.하지만 결국에는 작동한다. 공개 무효 deleteEntry (INT 번호) { \t \t 동안 (entryIterator.hasNext()) { \t \t \t 입력 항목 entryIterator.next =(); \t \t \t 경우 ((entry.getNumber() == 수)) { \t \t \t \t entryIterator.remove(); \t \t \t \t \t \t }} \t \t \t \t 동안 (entryIterator.hasPrevious()) { \t \t \t entryIterator.previous(); \t \t} \t} – user3553826

+0

user3553826 @ - 읽어 보시기 바랍니다 [이] (http://pragprog.com/the-pragmatic-programmer/extracts/coincidence), 다음 (HTTP [반복자]에 대한 문서를 다시 읽어 : // 문서 .oracle.com/javase/7/docs/api/java/util/ListIterator.html). 당신이하는 일은 매우 간단합니다 ** 잘못된 **이며, 당신이 가지고있는 실제 문제가 무엇이든 해결하지 못합니다. – kdgregory

+0

@kdgregory - 당연히 그 의견을 게시하자마자 문제가 해결 된 이유를 알아 냈습니다. 우연의 일치를 통해 해결책을 찾고 문제가 무엇인지, 해결 방법을 알기에 나는 어리석지 않을 것입니다. API를 자세히 연구하지 않았고 오류가 무엇인지 깨달았습니다. 매번 새로운 반복기를 만들었을 때 실제로 동일한 항목을 재사용하고 있다고 생각했습니다. 즉, 작업을 수행하기 전에 이터레이터를 목록의 시작 부분으로 재설정해야한다는 의미였습니다. – user3553826

관련 문제