使用 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中文网其他相关文章!