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

如何使用hasNext()与next()方法?程序输出后持续等待问题排查

问题原因

你的代码逻辑本身是对的,但Scanner.hasNext()的特性导致程序一直等待:这个方法会持续阻塞,直到检测到输入流的结束标记(EOF),而不是输入完几个单词就自动停止。当你输入sun moon cloud回车后,程序打印完三个单词,但输入流并没有关闭,hasNext()会继续等待新的输入,所以程序一直处于等待状态。

解决办法

有几种实用的方案可以解决这个问题:

1. 手动触发输入结束

在控制台里,通过快捷键告诉程序输入已经完成:

  • Windows:按下 Ctrl + Z 后回车
  • Linux/macOS:按下 Ctrl + D

触发后,hasNext()会返回false,循环终止,程序正常退出。

2. 按行读取并处理(支持空行终止)

如果希望输入完一行就处理,且输入空行时结束程序,可以改用nextLine()读取整行再分割单词:

import java.util.Scanner;

class RandomWord {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        while (s.hasNextLine()) {
            String line = s.nextLine();
            // 输入空行就停止循环
            if (line.isEmpty()) {
                break;
            }
            // 按任意数量的空格分割单词
            String[] words = line.split("\\s+");
            for (String palavra : words) {
                System.out.println(palavra);
            }
        }
        s.close();
    }
}

这个版本中,输入sun moon cloud回车后会立刻打印三个单词,然后等待下一行输入;直接回车输入空行,程序就会结束。

3. 指定终止关键词

如果想通过输入特定单词来终止程序,比如输入exit就停止,可以修改循环条件:

import java.util.Scanner;

class RandomWord {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String palavra;
        while (s.hasNext()) {
            palavra = s.next();
            // 遇到exit就终止循环
            if ("exit".equals(palavra)) {
                break;
            }
            System.out.println(palavra);
        }
        s.close();
    }
}

输入sun moon cloud exit后,程序会打印前三个单词,然后自动退出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:10:29