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

Scanner类hasNext()方法疑问:无限循环及方法说明含义咨询

关于Java Scanner类hasNext()方法的两个问题解答

问题1:循环陷入无限循环的原因及解决

你的代码里,hasNext()仅用于判断输入中是否存在下一个标记,但没有调用next()方法移动扫描器的位置。扫描器的指针始终停留在第一个标记Munich之前,每次循环判断时hasNext()都会返回true,导致无限输出"GOOD"。

要让循环执行4次(对应4个城市标记),必须在循环体内调用next()来推进扫描器位置,修正后的代码如下:

import java.util.Scanner;

public class main {
    public static void main(String[] args) {
        String t = "Munich     London      Paris   New_York";
        Scanner sc = new Scanner(t);

        while (sc.hasNext()) {
            sc.next(); // 推进扫描器到下一个标记
            System.out.println("GOOD");
        }
    }
}

问题2:官方文档语句的翻译与含义解析

语句翻译

"The scanner does not advance past any input." 翻译为:扫描器不会越过任何输入(即不会移动输入指针的位置)

含义解释

hasNext()是一个"探测性"方法:它只负责检查当前位置之后是否存在可识别的标记,不会改变扫描器的当前位置。比如,连续调用两次hasNext(),只要输入中还有标记,两次都会返回true,且扫描器的指针位置完全不变;而如果调用next(),扫描器就会移动到当前标记的末尾,准备读取下一个标记。这也是为什么你之前的代码会无限循环——只判断不移动位置,永远能检测到下一个标记。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:22:37