纠正 nextLine() 行为
第二个代码示例中使用 nextLine() 时遇到的问题源于 nextInt() 的组合和 nextLine().
问题nextInt()
nextLine() 消耗整行,包括空格和按 Enter 键之前输入的字符。但是,nextInt() 仅消耗数值。如果数字后面有非数字字符或空格,nextLine() 将尝试读取它们,从而导致意外行为。
解决方案:消耗剩余换行符
以确保nextLine() 按预期读取完整行,您可以在每个 nextInt() 之后添加一个 nextLine() 调用以消耗该行上的任何剩余字符。这确保了当使用 nextLine() 读取句子时,它将收到完整的一行。
更正示例:
// Example #2 (Corrected) import java.util.Scanner; class Test { public void menu() { Scanner scanner = new Scanner(System.in); while (true) { System.out.println("\nMenu Options\n"); System.out.println("(1) - do this"); System.out.println("(2) - quit"); System.out.print("Please enter your selection:\t"); int selection = scanner.nextInt(); scanner.nextLine(); // Consume remaining newline if (selection == 1) { System.out.print("Enter a sentence:\t"); String sentence = scanner.nextLine(); System.out.print("Enter an index:\t"); int index = scanner.nextInt(); System.out.println("\nYour sentence:\t" + sentence); System.out.println("Your index:\t" + index); } else if (selection == 2) { break; } } } }
以上是为什么 `nextLine()` 在 `nextInt()` 之后会出现错误行为以及如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!