簡體   English   中英

我如何從Iterator獲取兩個連續的值

[英]how can i get two consecutive values from Iterator

這是我嘗試獲取Iterator的兩個連續元素的代碼。

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

最終的問題在於while語句。 您的代碼不僅會從Iterator中獲取前兩個元素。 相反,如果Iterator中有偶數個元素,它將獲取最后兩個元素。 如果元素的數量為奇數,則x和y的值相同 具體來說,最后一個元素。

從根本上講,您代碼的問題是uvxy在方法之外聲明。 我假設您這樣做是因為您不知道如何返回多個值。 如果您需要返回多個值,請返回一個元素數組,或者返回一個自定義容器類。

這是一個示例,說明如何在數組中返回從給定Iterator中刪除的兩個元素:

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

請注意,如果迭代器中僅剩一個值,則返回數組的第二個元素將為null 如果Iterator為空,則數組的兩個元素都將為null

看起來不錯。 您的問題出在其他地方。 兩者的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

你為什么不使用大括號周圍的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);
    }

僅當兩個連續元素具有相同的index1或沒有下一個值(元素個數)時,此代碼才會為xy提供相同的值。

另一方面,您確定您的第一行不應為Iterator<Value> tr = values.iterator();

您更新的代碼沒有任何改變。 @BalusC的診斷仍然正確。 問題不在代碼的這一部分。

可能的原因包括:

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

但是,在沒有看到相關代碼的情況下,我們只能猜測出真正的問題可能是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM