2010-08-08 6 views
2

다음은 반복자의 두 개의 연속 요소를 얻으려고 시도한 코드입니다.반복자에서 두 개의 연속적인 값을 얻을 수있는 방법

public void Test(Iterator<Value> values) { 
    Iterator<Value> tr = values; 
    while (tr.hasNext()) { 
     v = tr.next(); 
     x = v.index1; 
     // u = null; 

     if (tr.hasNext()) { 
      u = tr.next(); 
      y = u.index1; 
     } else { 
      u = v; 
      y = u.index1; 
     } 

     System.out.println(x); 
     System.out.println(y); 
    } 
} 

하지만 여전히 나는이 뭐가 문제 X와 Y

에 대한 동일한 값을 얻고, 내가 두 변수 x와 y에 대해 동일한 값을 얻고있다. , 두 개의 연속적인 요소가 같은 index1이있는 경우이 코드는 xy에 대해 동일한 값을 줄 것이다

while (tr.hasNext()) { 
     v = tr.next(); 
     x = v.index1; 
     // u = null; 
     if (tr.hasNext()) { 
      u = tr.next(); 
      y = u.index1; 
     } else { 
      y = v.index1; 
     } 
     System.out.println(x); 
     System.out.println(y); 
    } 

:

답변

3

궁극적 인 문제는 while 문과 관련된 것입니다. 귀하의 코드는 Iterator에서 처음 두 요소를 가져 오는 것만은 아닙니다. 오히려 반복자에 짝수 개의 요소가 있으면 마지막 두 개를 가져옵니다. 요소 수가 홀수 인 경우 x 및 y에 대해 동일한 값을 얻게됩니다. 특히, 마지막 요소.

더 근본적으로, 코드의 문제는 u, v, xy이 당신의 방법 이외의 선언입니다. 두 개 이상의 값을 반환하는 방법을 모르기 때문에이 작업을 수행한다고 가정합니다.여러 값을 반환해야하는 경우 요소 배열을 반환하거나 사용자 정의 컨테이너 클래스를 반환합니다. 반복자가 하나만있는 경우 반환되는 배열의 두 번째 요소는 null 될 것

public static Value[] nextTwo(Iterator<Value> values) { 
    return new Value[] { 
     (values.hasNext()?values.next():null), 
     (values.hasNext()?values.next():null) 
    }; 
} 

참고 : 여기에

는 배열에서 주어진 반복자의 이륙 두 요소를 반환 할 수있는 방법의 예 가치가 남아 있습니다. Iterator가 비어있는 경우 배열의 두 요소는 null이됩니다.

0

왜 불필요한 변수 할당을하여 else 주위에 괄호를 사용하지 않도록 할 것 또는 다음 값 (홀수 요소)이 없습니다.

또 다른 메모에서 첫 번째 줄은 Iterator<Value> tr = values.iterator();이 아니어야합니까?

+0

예, 당신 말이 맞아,하지만 내 방법이 공공 무효 시험 (반복자 값) { 반복자 TR = 값과 같다; while (tr.hasNext()) { v = tr.next(); x = v.index1; // u = null; if (tr.hasNext()) { u = tr.next(); y = u.index1; } else { u = v; y = u.index1; } System.out.println (x); System.out.println (y); } } 여전히 x와 Y에 대해 동일한 값을 얻고 있습니다. – tkt986

+0

@tsegay : Iterator를 함수에 전달하지 마십시오. 대신 개체를 전달하십시오. – Borealid

2

괜찮아요. 너의 문제는 다른 곳에있다. 아마 index1 모두 똑같습니까? 또는 이터레이터에 하나의 항목 만 있습니까?

다음의 예는 다음

 
First: one, Second: two 
First: three, Second: four 
First: five, Second: five 
+0

답변과 예제를 보내 주셔서 감사합니다.하지만 문제가 될 수있는 곳은 어디입니까? 내 코드를 다시 확인할 수 있습니까? 업데이트했습니다. – tkt986

+1

이것은 변경되지 않습니다. 이미 문제의 두 가지 원인을 언급했습니다. – BalusC

0

업데이트 된 코드는 아무것도 변경되지 않습니다 예상대로

List<String> strings = Arrays.asList("one", "two", "three", "four", "five"); 
Iterator<String> iter = strings.iterator(); 
while (iter.hasNext()) { 
    String first = iter.next(); 
    String second = iter.hasNext() ? iter.next() : first; 

    System.out.printf("First: %s, Second: %s%n", first, second); 
} 

인쇄합니다. @ BalusC의 진단은 여전히 ​​정확합니다. 문제는이 코드 부분에 있지 않습니다.

가능한 원인은 다음과 같습니다

  • 당신은 하나 개 Value 요소 또는 반복자에 Value 요소의 홀수 번호가
  • 당신은 목록
  • 당신 자신의 index1에 대해 동일한 값을 가진 Value 요소가 동일한 Value 요소를 여러 번 목록에 삽입했습니다. (아마도 각 요소를 만들 때 new Value(...)을 사용하는 것을 잊어 버렸습니까?)
  • 사용자 정의 Iterator 클래스가 올바르게 작동하지 않습니다.

그러나 관련 코드를 보지 않고서는 실제 문제가 무엇인지 추측 할 수 있습니다.

관련 문제