Java 如何从迭代器中获得两个连续值
这是我的代码,我试图获得迭代器的两个连续元素Java 如何从迭代器中获得两个连续值,java,collections,iterator,Java,Collections,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 = t
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);
}
}
公共无效测试(迭代器值){
迭代器tr=值;
while(tr.hasNext()){
v=tr.next();
x=v.index1;
//u=零;
if(tr.hasNext()){
u=tr.next();
y=u.index1;
}否则{
u=v;
y=u.index1;
}
系统输出println(x);
系统输出打印项次(y);
}
}
但我仍然得到了x和Y的相同值
这有什么问题,我得到的两个变量x和y的值相同。为什么不在
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 tr=values.Iterator()代码>?看起来不错。你的问题在别的地方。可能两者的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);
}
List strings=Arrays.asList(“一”、“二”、“三”、“四”、“五”);
迭代器iter=strings.Iterator();
while(iter.hasNext()){
String first=iter.next();
字符串second=iter.hasNext()?iter.next():first;
System.out.printf(“第一个:%s,第二个:%s%n”,第一个,第二个);
}
按预期打印以下内容:
First: one, Second: two
First: three, Second: four
First: five, Second: five
第一:一,第二:二
第一:三,第二:四
第一:五,第二:五
您更新的代码不会改变任何东西@巴卢斯克的诊断仍然正确。问题不在代码的这一部分
可能的原因包括:
- 迭代器中有一个
Value
元素或奇数个Value
元素
- 列表中的
Value
元素的index1
值相同
- 您已多次将相同的
值
元素插入列表中。(可能您忘记使用新值(…)
来创建每个元素?)
- 您正在使用一个行为不正确的自定义
迭代器类
但是没有看到相关的代码,我们只能猜测真正的问题可能是什么。最终的问题是while
语句。您的代码将不仅仅从迭代器中获取前两个元素。相反,如果迭代器中有偶数个元素,它将获取最后两个。如果有奇数个元素,那么x和y将得到相同的值。具体来说,是最后一个元素
更重要的是,代码的问题是u
,v
,x
和y
在方法之外声明。我假设您这样做是因为您不知道如何返回多个值。如果需要返回多个值,请返回元素数组或返回自定义容器类
下面是一个示例,说明如何在数组中返回给定迭代器中的两个元素:
public static Value[] nextTwo(Iterator<Value> values) {
return new Value[] {
(values.hasNext()?values.next():null),
(values.hasNext()?values.next():null)
};
}
公共静态值[]nextTwo(迭代器值){
返回新值[]{
(values.hasNext()?values.next():null),
(values.hasNext()?values.next():null)
};
}
请注意,如果迭代器中只剩下一个值,则返回数组的第二个元素将为null
。如果迭代器是空的,数组的两个元素都将是null。是的,您是对的,但是我的方法类似于这个公共无效测试(迭代器值){Iterator 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的相同值。@tsegay:不要将迭代器传递给函数。而是传递对象。感谢您的回答和示例,但问题出在哪里。你能再检查一下我的代码吗,我已经更新了。这不会改变什么。我已经提到了造成你问题的两个可能原因。