正在跳过扫描仪nextLine

所以这是我使用的代码:

System.out.println("Create a name."); name = input.nextLine(); System.out.println("Create a password."); password = input.nextLine(); 

但是当它达到这一点时,它只是说“创建一个名字”。 和“创建密码”。 两个在同一时间然后我必须输入一些东西。 所以它基本上是跳过我需要键入字符串的Scanner部分。 在“创建一个名字”之后。 和“创建密码”。 是打印出来然后输入,名称和密码都改为我输入的内容。如何解决这个问题?

这是全class。 我只是测试所以它实际上不是一个程序:

 package just.testing; import java.util.Scanner; public class TestingJava { static int age; static String name; static String password; static boolean makeid = true; static boolean id = true; public static void main(String[] args){ makeid(null); if(makeid == true){ System.out.println("Yay."); }else{ } } public static void makeid(String[] args){ System.out.println("Create your account."); Scanner input = new Scanner(System.in); System.out.println("What is your age?"); int age = input.nextInt(); if(age<12){ System.out.println("You are too young to make an account."); makeid = false; return; } System.out.println("Create a name."); name = input.nextLine(); System.out.println("Create a password."); password = input.nextLine(); return; } } 

抱歉我的语法不好。 我不是英国人,所以我很难解释这一点。

nextInt()吃了输入数字而不是EOLN:

 Create your account. What is your age? 123 <- Here's actually another '\n' 

所以在创建名称之后第一次调用nextLine()接受它作为输入。

 System.out.println("Create a name."); name = input.nextLine(); <- This just gives you "\n" 

用户Integer.parseInt(input.nextLine())或在读取数字后添加另一个input.nextLine()将解决此问题:

 int age = Integer.parseInt(input.nextLine()); 

要么

 int age = input.nextInt(); input.nextLine() 

另请参阅此处以获取重复的问题。

这实际上并没有告诉你为什么要跳过这些行,但是当你捕获名称和密码时,你可以使用Console:

 Console console = System.console(); String name = console.readLine("Create a name."); char[] password = console.readPassword("Create a password."); System.out.println(name + ":" + new String(password)); 

您也可以使用next()而不是nextLine()。 我在日食中测试了它。 它的工作正常。

next()将起作用但它不会在空格后读取字符串。