Java 新手。发现“For+Scanner”奇怪行为

Newbie in Java. Found "For+Scanner" strange behavior

提问人:Artem Stukalov 提问时间:7/12/2023 最后编辑:KrokomotArtem Stukalov 更新时间:7/13/2023 访问量:52

问:

在学习 Java 的过程中,我发现我的程序中有一个奇怪的行为。

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        ArrayList<String> strings = new ArrayList();

        for (int i = 0; i < 3; i++) {
            strings.add(scanner.nextLine());
            System.out.println(strings.get(i));
        }
        System.out.println(strings.size());

    }
}

当前示例工作正常,因此我看到了正确的输入结果。 但是,如果我删除我的检查字符串,程序只允许我进行 2 个键盘输入而不是 3 个。而且它会自动在循环的第二步输入空字符串。System.out.println(strings.get(i));

例:example

那么,为什么会发生这种情况以及如何避免呢?

java for 循环 java.util.scanner

评论

0赞 7/12/2023
您是否可能在 nextLine() 调用之间调用扫描程序上的任何其他方法(例如 nextInt()),而这些方法未包含在问题代码中?
0赞 drgPP 7/12/2023
我不明白为什么如果您注释打印语句,电流循环会缩小 1。您仍然可以将输入添加到字符串列表中,即 3 个输入,但您不会迭代显示它们。您可以在 for 循环之后显示整个列表,并确保所有元素都在那里。大小仍为 3。
0赞 Artem Stukalov 7/12/2023
@OHGODSPIDERS 我已经添加了程序的所有代码
0赞 7/12/2023
在这种情况下,我根本无法重现您的问题: ideone.com/WGDWIt - 如您所见,我删除了您声称删除的行会导致您的错误,但列表最终仍以 3 的大小结束。
0赞 Artem Stukalov 7/12/2023
@OHGODSPIDERS 似乎我在 IDEA 中有一些错误,因为这是我的输出结果: ibb.co/m6TdrbH

答:

0赞 Artem Stukalov 7/12/2023 #1

好吧,问题出在IDE中。我已经下载了 Eclipse,但问题没有在那里重现。感谢所有试图提供帮助的人! 以下是有关问题 IDE 的信息:

IntelliJ IDEA 2022.1.1(社区版) 内部版本 #IC-221.5591.52,构建于 2022 年 5 月 10 日 运行时版本: 11.0.14.1+1-b2043.45 amd64 VM:JetBrains s.r.o. 开发的 OpenJDK 64 位服务器 VM 窗户 11 10.0 GC:G1年轻一代,G1老一代 内存:2048M 磁芯:16 非捆绑插件: com.jetbrains.edu (2022.5-2022.1-343)

Kotlin:221-1.6.21-release-337-IJ5591.52

评论

0赞 majixin 7/12/2023
我不相信IDEA在这里有问题。在不了解问题发生方式/原因的情况下说特定的IDE版本是问题还为时过早。您的项目在 IDEA 中设置了“Project SDK”,它是否指向您的 Eclipse IDE 使用的同一 JDK?
0赞 Community 7/18/2023
您的答案可以通过其他支持信息进行改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。