首页 > Java > java教程 > 为什么 Java 中的'scanner.nextLine()”与'scanner.nextInt()”之后的行为不同?

为什么 Java 中的'scanner.nextLine()”与'scanner.nextInt()”之后的行为不同?

Mary-Kate Olsen
发布: 2024-12-27 07:21:09
原创
887 人浏览过

Why Does `scanner.nextLine()` Behave Differently After `scanner.nextInt()` in Java?

使用 Scanner.nextLine() 进行用户输入

问题:

为什么Scanner.nextLine() 方法在以下两个 Java 代码中的行为不同示例?

// Working Example
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a sentence: ");
String sentence = scanner.nextLine();
登录后复制
// Not Working Example
while (true) {
    System.out.print("Enter a sentence: ");
    int selection = scanner.nextInt();
    String sentence = scanner.nextLine();
}
登录后复制

答案:

行为上的差异源于scanner.nextInt() 与scanner.nextLine() 相比如何消耗输入。

在工作示例中,scanner.nextLine() 读取整行输入,包括空格,直到它遇到一个换行符。相比之下,scanner.nextInt() 仅读取输入的整数部分,将所有剩余字符保留在输入缓冲区中。

当使用 nextInt() 调用而没有任何后续调用 nextLine() 时,任何输入缓冲区中剩余的字符(例如换行符)不会被消耗,这可能会导致后续的 nextLine() 调用出现问题。

在非工作示例中,在用户输入一个数字,剩余的换行符不会被 nextInt() 消耗。因此,对 nextLine() 的后续调用会立即读取换行符,从而导致将空字符串分配给句子。

要解决此问题,可以在每个nextInt() 调用以消耗输入缓冲区中的所有剩余字符。

以上是为什么 Java 中的'scanner.nextLine()”与'scanner.nextInt()”之后的行为不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板