当我运行程序而不是读取字符串并将其存储在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);
答案 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();