Java程序无法正确执行nextLine()

时间:2015-11-19 01:35:05

标签: java

当我运行程序而不是读取字符串并将其存储在tempAddress中时,我的程序只需在输入输入之前打印下一行。使用下一个为前两个工作,因为我只使用一个单词,但第三个单词包含多个单词所以需要其他东西,通过我的研究我发现nextLine()是答案,但我无法让它工作,因为其他人有, 提前致谢。

System.out.println("Enter Employee First Name: ");
String tempFirstName = input.next();
employeesArray[i].setFirstName(tempFirstName);

System.out.println("Enter Employee Last Name: ");
String tempLastName = input.next();
employeesArray[i].setLastName(tempLastName);

System.out.println("Enter Employee Address: ");
String tempAddress = input.nextLine();
employeesArray[i].setAddress(tempAddress);

System.out.println("Enter Employee Title: ");
String tempTitle = input.next();
employeesArray[i].setTitle(tempTitle);

2 个答案:

答案 0 :(得分:2)

基本上,扫描程序默认使用空格标记输入。使用scan的next()方法返回空格之前的第一个标记,指针停留在那里。使用nextLine()返回整行,然后将指针移动到下一行。

你的nextLine()行为不正常的原因是,你之前使用next()输入员工姓氏会导致指针留在行中,因此,当你到达使用nextLine获取员工地址的点时( ),指针返回前一个输入next()的剩余部分,这显然是空的(当提供一个字作为next()的输入时)。假设您输入了两个以空格分隔的单词,next()将第一个单词存储在姓氏字段中,指针在第一个标记之后等待第二个标记之后,一旦到达nextLine()指针返回第二个标记并移动到新线。

解决方法是在读取姓氏输入后执行nextLine(),以确保指针在新行中等待输入地址。

我通过在其中插入input.nextLine()来更新我的代码,以确保消耗扫描仪输入并将指针移动到下一行。

    System.out.println("Enter Employee First Name: ");
    String tempFirstName = input.next();
    employeesArray[i].setFirstName(tempFirstName);

    System.out.println("Enter Employee Last Name: ");
    String tempLastName = input.next();
    employeesArray[i].setLastName(tempLastName);

    //feed this to move the scanner to next line
    input.nextLine(); 

    System.out.println("Enter Employee Address: ");
    String tempAddress = input.nextLine();
    employeesArray[i].setAddress(tempAddress);

    System.out.println("Enter Employee Title: ");
    String tempTitle = input.next();
    employeesArray[i].setTitle(tempTitle);

答案 1 :(得分:1)

当你有input.next()时,它会读取输入,而不是newline字符,它会将其留在输入流中。 input.nextLine()newline字符结尾。因此,当执行input.nextLine()时,它会在不接受任何输入的情况下停止,因为它已经从输入流中获得了newline\n)个字符。

解决方案:在执行newline之前阅读inupt.nextLine()

System.out.println("Enter Employee Address: ");
input.next();//read the newline char - and don't store it, we don't need it.
String tempAddress = input.nextLine();

另见:https://stackoverflow.com/a/13102066/3013996