下面是重现问题的代码

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

我try 了这个代码,得到了Omni Omni而不是Onmi Okan.我还try 了不同的元素集,但得到了相同的问题-第一个元素重复了list.size()

推荐答案

而不是

        for (var item = iter.next(); iter.hasNext(); iter.next()) {
            System.out.println(item);
        }

您可以使用以下选项,但仍不是最佳 Select :

        for (; iter.hasNext();) {
            System.out.println(iter.next());
        }

最佳 Select 是使用While循环,如下所示:

        while (iter.hasNext()) {
            System.out.println(iter.next());
        }

问题出在您的for循环中.

这是for循环的 struct

for(initialization; exit condition; update variables)

在您的例子中,您使用var item = iter.next()作为初始化式,这意味着item是用第一个值初始化的. 在打印该值之后,作为update variables部分,您完成了iter.next(),这将返回下一个值.但你从来没有储存过它.

update variables之后,它将判断退出条件.由于已经提取了第二个值,因此iter.hasNext()将返回FALSE,因此for循环将退出.因此,在您的例子中,只打印了一个值.第二个值没有存储在任何变量中.您可以将item = iter.next()作为更新部分,但仍有item将被更新,但由于iter.hasNext()条件将在更新变量后返回FALSE,因此它不会仍然被打印.

Java相关问答推荐

Javascript更新alert 可扩展内容样式与CSS—按钮更多/更少

将成为一个比较者.比较…在现代Java中,编译器会对`CompareTo`方法进行优化吗?

使用意向过滤器从另一个应用程序启动服务

如何判断一个矩阵是否为有框矩阵?

如何获得执行人?

用户填充的数组列表永不结束循环

如何将其他属性引用到log4j2 yaml配置中?

如何在antlr4中跳过所有反斜杠-换行符而保留换行符?

try 从REST API返回对象列表时出错

与IntArray相比,ArrayList<;Int>;对于大量元素的性能极差

Java.lang.invke.LambdaConversionException:实例方法InvokeVirtual的参数数量不正确

是否有一个Java Future实现可以在池繁忙时在调用者线程中执行?

如何获得凌空cookies ,并设置它在下一个请求- android

对从Spring Boot 3.1.5升级到3.2.0的方法的查询验证失败

OAuth:登录后无法查看Google邮箱地址

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

Java编译器是否进行了持续的折叠优化,以及如何进行判断?

Spring Boot Security-每个端点都被403禁止,Spring记录一个BasicErrorController#错误(HttpServlet请求)

ANTLR 接受特殊字符,例如 .标识符或表达式中的(点)和 ,(逗号)

Swagger.io OpenApi v3.0 声明默认媒体类型