2011-07-26 2 views
0

연락처 정보 (이름, 생년월일 등)가있는 연결된 목록이 있습니다. 목록의 연락처를 목록에 추가합니다. 필자는 이터레이터를 사용하여 모든 연락처의 정보에 액세스 할 수 있도록 목록을 검토하려고합니다. 이것은 내가 문제가있는 곳입니다. 다음 단추를 사용하여 모든 연락처 정보에 액세스 할 수 있지만 다음을 누를 때마다 증가하는 색인을 사용하여이를 수행하고 있습니다. 나는 증분을 사용하지 않고 반복자를 사용하여 그것을하고 싶지 않다. 이터레이터를 사용할 때 참조를 저장하려고 시도하지만 잘못하고 있다고 생각합니다.반복자 저장 참조

btnNext.addActionListener(new ActionListener() { 

     private ContactList save; 

public void actionPerformed(ActionEvent arg0) { 

Iterator<ContactList> iterator = list.iterator(); 

if(iterator.hasNext()) 
{ 
save = itr.next(); 
name.setText(save.firstName); 
lastName.setText(save.lastName); 
dob.setText(save.dob); 
homeNum.setText(save.homeNum); 
cellNum.setText(save.cellNum); 
      } 
} 
}}; 

이 코드는 목록의 첫 번째 연락처 만 가져옵니다. 단추를 누르면 또한 다음 연락처를 얻으려면 코드를 원한다.하지만 iterator 이동하기 때문에 itr.next() 저장하지 않는 작업 처리 iterator 이후 알고 iterator 이동 및 넣어 다른 필드와 함께 ConcurrentModualError를 얻습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

4

거의 끝났지 만 실제로는 반복자을 저장하지 않았습니다.

btnNext.addActionListener(new ActionListener() { 

    // save the iterator, not the list item 
    private Iterator<ContactList> iterator; 

    public void actionPerformed(ActionEvent arg0) { 

     if(iterator == null){ 
      iterator = list.iterator(); 
     } 

     if(iterator.hasNext()) 
     { 
      ContactList save = iterator.next(); // first time itr is mentioned, assume you mean iterator 
      name.setText(save.firstName); 
      lastName.setText(save.lastName); 
      dob.setText(save.dob); 
      homeNum.setText(save.homeNum); 
      cellNum.setText(save.cellNum); 
     } 
    } 
}}; 

여기에 까다로운 부분은 코드가 시작 때마다 시작 그래서 list.iterator() 모든 호출은 새로운 반복자를 얻을 수 있다는 것입니다. ActionListener에서 처음으로 Iterator을 저장하고 그 후에는 계속 사용하는 것이 좋습니다.

+0

고마워요, 이것이 제가 찾고있는 것입니다. 설명 주셔서 감사합니다. – Jazzy

0

오류는 실제로 ConcurrentModificationException입니다. LinkedList를 사용하면 반복자를 사용하여 반복 변경을 수행 할 수 없습니다. 이와 같이 Iterator를 장기간 저장하면 기본적으로 반복기를 보장합니다. 가장 간단한 방법은 현재보고있는 목록의 색인을 저장하고 단추가 색인을 변경하도록하는 것입니다.