2010-08-08 67 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的值相同。

回答

3

最終的問題是while聲明。你的代碼不會從Iterator獲取前兩個元素。相反,如果迭代器中存在偶數個元素,它將抓住最後兩個元素。如果存在奇數個元素,則您將得到x和y的相同值。具體來說,最後一個元素。

更基本的問題是您的代碼是uv,xy是在您的方法之外聲明的。我假設你這樣做是因爲你不知道如何返回多個值。如果您需要返回多個值,則返回一組元素,或者返回一個自定義容器類。

這裏是如何在一個數組的形式返回給定的Iterator的帶下兩個元素的例子:

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

注意,返回數組的第二個元素是null如果迭代只有一個值留在它。如果迭代器爲空,則數組的兩個元素將爲null

0

你爲什麼不使用大括號的else四周,避免不必要的變量賦值:

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); 
    } 

此代碼只會給相同的值xy如果任何兩個連續的元素具有相同index1,或者沒有下一個值(奇數個元素)。

在另一張紙上,你確定你的第一行不應該是Iterator<Value> tr = values.iterator();

+0

是的,你是對的,但我的方法是這樣的 公共無效測試(迭代器值){ 迭代器 TR =值; (tr.hasNext()){ v = tr.next(); x = v.index1; // u = null; if(tr.hasNext()){ u = tr.next(); y = u.index1;其他{ u = v; y = u.index1; } System.out.println(x); System.out.println(y); } } 但是我仍然得到x和Y的相同值。 – tkt986 2010-08-08 02:56:30

+0

@tsegay:不要將Iterator傳遞給函數。改爲傳遞對象。 – Borealid 2010-08-08 03:19:00

2

看起來很好。你的問題在別的地方。可能index1都是一樣的?或者你在迭代器中只有一個項目?

下面的例子

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); 
} 

打印效果與預期以下

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

感謝您的答案和示例,但問題在哪裏。你能否再次檢查我的代碼,我已經更新了它。 – tkt986 2010-08-08 02:59:38

+1

這不會改變事情。我已經提到了你的問題的兩個可能的原因。 – BalusC 2010-08-08 03:00:15

0

你更新後的代碼不會改變任何東西。 @ BalusC的診斷仍然是正確的。問題不在代碼的這一部分。

可能原因包括:

  • 您有一個Value元件或奇數個迭代器中Value元件
  • 你必須Value元件具有相同值的爲其index1在列表
  • 您已經多次將相同的Value元素插入到列表中。 (也許你忘了用new Value(...)來創建每個元素?)
  • 您正在使用自定義Iterator類的行爲不正確。

但是沒有看到相關的代碼,我們只能猜測真正的問題可能是什麼。