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
相关产品推荐
相关产品推荐

