2017-09-28 8 views
1

목록 앞이 끝 부분에서 시작하는 줄 바꿈 배열에 대한 반복자를 작성해야합니다. 따라서 Iterator는 "front"변수에서 시작하여 목록의 끝까지 반복 한 다음 목록의 시작 부분에서 시작하여 "rear"에 도달 할 때까지 반복해야합니다.래핑하는 반복자를 쓰면 끝으로 시작하여 모든 요소를 ​​순서대로 인쇄합니다.

"rear"배열의 마지막 요소가 인쇄되지 않고 배열이 꽉 찼을 때 요소를 인쇄하지 않습니다.

public Iterator<E> iterator(){  
    return new IteratorAssist(); 
} 

class IteratorAssist implements Iterator<E> { 

    public IteratorAssist() { 
     index = front; 
    } 
    @Override 
    public boolean hasNext() { 

     if(index != data.length) 
      return index != rear + 1 ; 
     else if(index == data.length) 
      index = 0; 
     return index != rear + 1; 
    } 
    @Override 
    public E next() { 
     if(!hasNext()) 
      throw new NoSuchElementException(); 
     return data[index++]; 
    } 
} 
+0

솔루션에 관한 한, 나는 단순히'data' 자체를 연결 한 다음 결과를 반복하므로 포인터로 번거 로움을 피할 수 있습니다. – Bohemian

+0

앞뒤를 설정 한 코드를 표시 할 수 있습니까? 그들은 언제든지 바뀌나요? 그리고 당신은 그들이 같은 요소가 아니며 앞이 항상> 뒷쪽이라고 확신합니까? 또한, 두 개의 인쇄물 케이스 (뒤쪽 요소를 건너 뛰고 모든 요소를 ​​건너 뛸 때)가있는 코드는 매우 유용합니다. – Assafs

+0

다음은 귀하의 문제에 유용 할 수있는 답변을 작성한 것입니다. 귀하의 질문에 조금 더 자세한 내용을 추가 할 수 있다면 기꺼이 추가하고 구체적으로 설명해 드리겠습니다. 그것이 당신을 도왔다 고 느낀다면, 그것을 받아 들일 수 있습니까? 답변 옆에있는 회색 확인 표시를 클릭하면 녹색으로 변합니다. – Assafs

답변

0

그것은 당신이 지금까지 게시 된 코드에서 얘기하기 어렵다,하지만하지 반복자의 생성자에서 index=front에 연결될 수있다 인쇄되는 전체 배열 문제, 그리고 가능성이 front=rear+1는 (배열 될 때 완전 완전). 그래서 정면에서 시작하면 hasNext()에 즉각적인 오류가 발생하고 반복 할 수 없습니다.

이러한 경우에는 랩백시 앞면과 뒷면 사이에 간격 셀을 항상 유지하여 문제를 해결할 수 있습니다. 반복하는 클래스의 코드를 게시하는 경우이를 수행 할 수있는 방법을 권장하도록 도와 줄 수 있습니다.