Java 使用scanner.nextLine()
我在尝试使用java.util.Scanner中的nextLine()方法时遇到了问题 以下是我尝试过的:Java 使用scanner.nextLine(),java,java.util.scanner,Java,Java.util.scanner,我在尝试使用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
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语句=scanner.nextLine()代码>等待输入,然后继续执行System.out.print(“输入索引:\t”)代码>
这将产生以下输出:
Enter a sentence: Hello.
Enter an index: 0
Your sentence: Hello.
Your index: 0
Menu Options
(1) - do this
(2) - quit
Please enter your selection: 1
Enter a sentence: Enter an index:
示例#2:此示例未按预期工作。本例使用while循环和if-else结构允许用户选择要执行的操作。一旦程序到达String语句=scanner.nextLine()代码>,它不等待输入,而是执行行System.out.print(“输入索引:\t”)代码>
这将产生以下输出:
Enter a sentence: Hello.
Enter an index: 0
Your sentence: Hello.
Your index: 0
Menu Options
(1) - do this
(2) - quit
Please enter your selection: 1
Enter a sentence: Enter an index:
这样就不可能输入一个句子
为什么示例2没有达到预期效果?Ex.1和Ex.2之间唯一的区别是Ex.2有一个while循环和if-else结构。我不明白这为什么会影响scanner.nextInt()的行为 我想你的问题是
int selection = scanner.nextInt();
只读取数字,而不是行尾或数字后面的任何内容。当你申报时
String sentence = scanner.nextLine();
这将读取带有数字的行的其余部分(在我怀疑的数字后面没有任何内容)
尝试放置扫描仪。nextLine();如果要忽略行的其余部分,请在每次nextInt()之后执行。而不是每次要读取内容时都放置一个额外的扫描仪。nextLine()
,因为您似乎希望在新行上接受每个输入,因此您可能希望改为更改分隔符以实际仅匹配新行(而不是任何空白,这是默认值)
因此,要读取一行输入,您只需要具有与next{Int,Double,…}相同的行为分隔符的scanner.next()
“nextLine()every time”方法的不同之处在于,后者将接受3
、3
和3无论什么
,而前者只接受一行上的3
,或者
int selection = Integer.parseInt(scanner.nextLine());
这是因为当您输入一个数字,然后按enter键时,input.nextInt()
只使用数字,而不使用“行尾”。int、double等原始数据类型不使用“行尾”,因此“行尾”保留在缓冲区中,当input.next()
执行时,它使用“行尾”这就是为什么,您的字符串语句=scanner.next()
只消耗“行尾”,而不等待从键盘读取
提示:使用scanner.nextLine()
而不是scanner.next()
,因为scanner.next()
不会从键盘读取空格。(在键盘上留出一些空格后截断字符串,只在空格前显示字符串。)不要尝试用nextLine()扫描文本;在使用nextInt()后)使用相同的扫描器!它与Java扫描器不兼容,许多Java开发人员选择只使用另一个扫描器来处理整数。如果需要,可以调用这些扫描器scan1和scan2。这是正确的。回车符不会被nextInt
使用。解决方法是使用您的解决方案或使用一种模式来包含两个CRs和nd其他分隔符。相关:在示例#2中,在这一行之前,String语句=scanner.nextLine();在sc.nextLine()行下面添加;