我正在尝试编写一个for循环,该循环将允许用户输入五个名称和年龄。我遇到的问题是,它第一次正确运行,但是第二次运行时,名字和姓氏结合在一起,不允许两个字符串输入。它将允许随后移动到整数条目以获取年龄。任何帮助表示赞赏。
import java.util.Scanner;
public class QueueImp extends people{
public static void main(String[] args) {
String userL;
String userF;
int userA;
int userchoice = 0;
Scanner scnr = new Scanner(System.in);
for(int i = 0; i<5; i++) {
System.out.print("Please enter last name: ");
userL = scnr.nextLine();
System.out.println("");
System.out.println("Please enter first name: ");
userF = scnr.nextLine();
System.out.println("Please enter age: ");
userA = scnr.nextInt();
System.out.println("");
pName(userL, userF, userA);
}
答案 0 :(得分:1)
原因是尚未使用换行符(输入整数)。因此,下一个循环迭代的scnr.nextLine()
将消耗掉它,因此跳过了第二个姓氏输入。要使用换行符,请在扫描整数后立即再添加1个scnr.nextLine()
。
for(int i = 0; i<5; i++) {
System.out.print("Please enter last name: ");
userL = scnr.nextLine();
System.out.println("");
System.out.println("Please enter first name: ");
userF = scnr.nextLine();
System.out.println("Please enter age: ");
userA = scnr.nextInt();
System.out.println("");
scnr.nextLine();
pName(userL, userF, userA);
}
答案 1 :(得分:1)
请使用由next
插入的nextLine
System.out.print("Please enter last name: ");
userL = scnr.next();
next()
只能读取输入,直到空格为止。它无法读取两个用空格隔开的单词。另外,next()
在读取输入后将光标置于同一行。
@编辑:
nextLine()
读取包含单词之间的空格的输入(即,读取直到\ n行的结尾)。读取输入后,nextLine()
将光标置于下一行。
要阅读整行,可以使用nextLine()
。
以供参考:What's the difference between next() and nextLine() methods from Scanner class?
如果要使用,请像这样使用Integer.parseInt
来消耗新行字符
userA = Integer.parseInt(scnr.nextInt());
答案 2 :(得分:0)
使用scnr.next()
将解决您的问题。
为什么它不能与scnr.nextLine()
一起使用,是因为next()仅返回空格之前的内容。返回当前行后,nextLine()会自动将扫描仪向下移动。您无法输入细节的第二次迭代的原因是,指针已经在第二次迭代本身之前向前移动。
System.out.print("Please enter last name: ");
userL = scnr.next();
System.out.println("Please enter first name: ");
userF = scnr.next();
System.out.println("Please enter age: ");
userA = scnr.nextInt();
System.out.println(userL + " " + userF + " " + userA);