提问人:Sped 提问时间:11/9/2023 最后编辑:ChaosfireSped 更新时间:11/9/2023 访问量:72
循环不起作用 - 只有第一个元素重复
The loop doesn't work - only the first element repeats
问:
下面是重现该问题的代码
var list = new ArrayList<String>();
list.add("Omni");
list.add("Okan");
var iter = list.iterator();
for (var item = iter.next(); iter.hasNext(); iter.next()) {
System.out.println(item);
}
我尝试了这段代码,而不是.我也尝试了不同的元素集,但遇到了同样的问题 - 第一个元素重复了几次Omni Omni
Onmi Okan
list.size()
答:
0赞
Oleg Cherednik
11/9/2023
#1
你不直接地使用循环。最好改用循环。for
while
List<String> items = List.of("Omni", "Okan");
Iterator<String> it = items.iterator();
while (it.hasNext()) {
String item = it.next();
System.out.println(item);
}
3赞
Pateman
11/9/2023
#2
这将起作用:
var list = new ArrayList<String>();
list.add("Omni");
list.add("Okan");
for (var it = list.iterator(); it.hasNext(); ) {
var item = it.next();
System.out.println(item);
}
然而,这并不是对读者最友好的方式。还有其他选择(奥列格已经提出了一个。请看下面的一些例子: 在 Java 中遍历列表的方法
最直接的方法是增强的 for 循环,如下所示:
var list = new ArrayList<String>();
list.add("Omni");
list.add("Okan");
for (var elem : list) {
System.out.println(elem);
}
评论
0赞
user2342558
11/9/2023
注意:那不是 Java,而是 JavaScript。(顺便说一句,它们非常相似,并且都具有增强的 for 循环)
0赞
Pateman
11/9/2023
这确实是 Java。较新的版本允许使用关键字。var
0赞
user2342558
11/9/2023
哦,我明白了,从 v 10 开始,谢谢
0赞
Ishan
11/9/2023
#3
而不是
for (var item = iter.next(); iter.hasNext(); iter.next()) {
System.out.println(item);
}
您可以使用以下选项,但仍然不是最佳选项:
for (; iter.hasNext();) {
System.out.println(iter.next());
}
最好的选择是使用这样的 while 循环:
while (iter.hasNext()) {
System.out.println(iter.next());
}
问题出在你的for循环中。
这是for循环的结构
for(initialization; exit condition; update variables)
在您的例子中,您用作初始值设定项,这意味着 已使用第一个值进行初始化。
打印该值后,作为部件,您做了 ,这将返回下一个值。但你从来没有存储过它。var item = iter.next()
item
update variables
iter.next()
之后,它将检查退出条件。由于已提取第二个值,因此将返回 false,因此 for 循环将退出。因此,在您的例子中,只打印了一个值。第二个值只是没有存储在任何变量中。您可以作为更新部分完成,但仍然会更新,但由于条件将在更新变量后返回 false,因此它不会仍然打印。update variables
iter.hasNext()
item = iter.next()
item
iter.hasNext()
评论
item
hasNext()
next()
var
var