[英]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的值相同 。 具體來說,最后一個元素。
從根本上講,您代碼的問題是u
, v
, x
和y
在方法之外聲明。 我假設您這樣做是因為您不知道如何返回多個值。 如果您需要返回多個值,請返回一個元素數組,或者返回一個自定義容器類。
這是一個示例,說明如何在數組中返回從給定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
或沒有下一個值(元素個數)時,此代碼才會為x
和y
提供相同的值。
另一方面,您確定您的第一行不應為Iterator<Value> tr = values.iterator();
?
您更新的代碼沒有任何改變。 @BalusC的診斷仍然正確。 問題不在代碼的這一部分。
可能的原因包括:
Value
元素或奇數個Value
元素 Value
元素的index1
值相同 Value
元素插入列表。 (也許您忘了使用new Value(...)
創建每個元素?) Iterator
類。 但是,在沒有看到相關代碼的情況下,我們只能猜測出真正的問題可能是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.