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

时间:2014-10-29 08:55:45

标签: 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();

3 个答案:

答案 0 :(得分:14)

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

解决方法可能是这个:

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

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

System.out.println("Enter name");
name1 = in.nextLine();

另一种方法是始终将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();

为什么不只是Scanner.next()

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

System.out("Enter name: ");
String name = in.next();
System.out(name);

将产生:

Enter name: Mad Scientist
Mad

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

答案 1 :(得分:2)

这是您更新的工作代码。

 package myPackage;

    import java.util.Scanner;

    public class test {

        /**
         * @param args
         */
        public static void main(String[] args) {
            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.next();

            System.out.println("Enter age");
            age1 = in.nextInt();

        }

    }

答案 2 :(得分:1)

可能是你这样试试..

而不是这段代码

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

试试这个

       System.out.println("Enter name");      
       name1 = in.next();