尝试使用java.util.Scanner中的nextLine()方法时遇到麻烦。
java.util.Scanner
nextLine()
这是我尝试过的:
import java.util.Scanner; class TestRevised { public void menu() { Scanner scanner = new Scanner(System.in); 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); } }
示例1:此示例按预期方式工作。该行String sentence = scanner.nextLine();等待输入,然后再继续System.out.print("Enter an index:\t");。
String sentence = scanner.nextLine()
System.out.print("Enter an index:\t");
产生输出:
Enter a sentence: Hello. Enter an index: 0 Your sentence: Hello. Your index: 0 // Example #2 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(); 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; } } } }
示例2:此示例无法正常工作。本示例使用while循环以及if-else结构允许用户选择要执行的操作。一旦程序到达String sentence = scanner.nextLine();,它就不会等待输入,而是执行该行System.out.print("Enter an index:\t");。
if-else
System.out.print("Enter an index:\t")
Menu Options (1) - do this (2) - quit Please enter your selection: 1 Enter a sentence: Enter an index:
这使得不可能输入句子。
为什么示例2不能按预期工作?唯一之间的区别。1和2是那个 2具有while循环和if-else结构。我不明白为什么这会影响Scanner.nextInt()的行为。
2
1
while
Scanner.nextInt()
我想你的问题是
int selection = scanner.nextInt();
仅读取数字,而不读取行尾或数字之后的任何内容。当你声明
String sentence = scanner.nextLine();
这将读取行的其余部分及其上的数字(我怀疑该数字之后没有任何内容)
尝试放置一个扫描仪。如果你打算忽略该行的其余部分,则在每个nextInt()之后。