为什么在Java中跳过整数输入后的字符串输入?

bha*_*anu 4 java

我试图在Java中输入某些字符串和整数变量的值.但是如果我在整数之后输入字符串,则在控制台中只跳过字符串输入并移动到下一个输入.

这是代码

String name1;
int id1,age1;

Scanner in = new Scanner(System.in);

//I can input name if input is before all integers

System.out.println("Enter id");
id1 = in.nextInt();


System.out.println("Enter name");       //Problem here, name input gets skipped
name1 = in.nextLine();

System.out.println("Enter age");
age1 = in.nextInt();
Run Code Online (Sandbox Code Playgroud)

enr*_*cis 16

这是一个常见问题,因为该nextInt方法不会读取输入的换行符,所以当您发出命令时nextLine,扫描程序会找到换行符并将其作为一行给出.

解决方法可能是这个:

System.out.println("Enter id");
id1 = in.nextInt();

in.nextLine();   // skip the newline character

System.out.println("Enter name");
name1 = in.nextLine();
Run Code Online (Sandbox Code Playgroud)

另一种方法是始终使用nextLine包裹成Integer.parseInt:

int id1;
try {
    System.out.println("Enter id");
    id1 = Integer.parseInt(input.nextLine());
} catch (NumberFormatException e) {
    e.printStackTrace();
}
System.out.println("Enter name");
name1 = in.nextLine();
Run Code Online (Sandbox Code Playgroud)

为什么不Scanner.next()呢?

我不会使用,Scanner.next()因为这将只读取下一个标记而不是整行.例如,以下代码:

System.out("Enter name: ");
String name = in.next();
System.out(name);
Run Code Online (Sandbox Code Playgroud)

将产生:

Enter name: Mad Scientist
Mad
Run Code Online (Sandbox Code Playgroud)

它不会处理科学家,因为Mad本身已经是一个完整的令牌.因此,这可能是您的应用程序的预期行为,但它与您在问题中发布的代码具有不同的语义.