You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java统计多行元音程序循环最后一次迭代需按回车才输出问题求助

问题原因

这是Scanner.nextLine()方法的固有特性导致的:该方法必须读取到换行符才会判定当前行结束,返回读取到的行内容(自动丢弃末尾的换行符)。
当你手动输入测试数据时,输入完最后一行I like the sun后如果没有按下回车键,第6次循环执行的a = in.nextLine()会一直处于阻塞等待状态,不会执行后续的统计、打印逻辑,所以只能看到前5行的统计结果。只有按下回车键输入换行符后,最后一行的读取流程才会完成,第6个统计值才会打印输出。
如果是从带完整换行的文件重定向输入,这个问题不会出现,因为规范的文本文件最后一行末尾都会自带换行符。

另外你的代码还有一个隐藏问题:当前只判断了小写的元音字母,输入里的大写元音(比如第一行的Emily首字母E)会被漏统计。

解决方法

临时解决方案(交互式输入场景)

输入完所有内容后,额外按下一次回车键补全最后一行的末尾换行即可,原有代码无需修改。

兼容无末尾换行的输入场景

可以调整读取逻辑,优先判断是否还有剩余输入,同时增加大写元音的判断逻辑,修改后的代码如下:

Scanner in = new Scanner(System.in);
int cases = in.nextInt();
in.nextLine(); // 跳过nextInt()剩余的换行符

for (int i = 0; i < cases; i++) {
    // 优先判断是否还有可读取的行,避免无换行时的永久阻塞
    if (!in.hasNextLine()) {
        break;
    }
    String a = in.nextLine();
    int vowels = 0;
    for (int b = 0; b < a.length(); b++) {
        char temp = Character.toLowerCase(a.charAt(b));
        if (temp == 'a' || temp == 'e' || temp == 'i' || temp == 'o' || temp == 'u') {
            vowels++;
        }
    }
    System.out.println(vowels);
}

修改点说明:

  • 用Character.toLowerCase()统一转小写后再判断,避免漏统计大写元音
  • 增加in.hasNextLine()判断,当输入没有剩余内容时直接跳出循环,避免永久阻塞
  • 调整了变量的作用域,把vowels变量移到循环内定义,无需每次手动重置为0,代码更简洁

内容的提问来源于stack exchange,提问作者Maniram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:54:05