为什么我不能在函数中保存来自 Scanner 的用户输入?
Why can't I save user input from Scanner inside a function?
我有一个 Phone
class,它只有一个字段:Contact
class 实例的 ArrayList。 Contact
class 只有两个字段:姓名和号码。
当你 运行 程序时,
- 它显示编号的指令
- 您输入一个数字
- 它使用 switch 语句调用执行相应操作的函数,如下所示:
switch (num) {
case 0:
printInstructions();
break;
case 1:
addContact();
break;
}
switch
语句处于 while 循环中。
我已经在函数中放置了提示用户输入信息(如姓名)的代码:
public static void addContact() {
System.out.print("Name: ");
String name = scanner.nextLine();
scanner.nextLine();
System.out.print("Number: ");
String number = scanner.nextLine();
phone.addContact(name, number);
}
phone.addContact()
:
public void addContact(String name, String number) {
//there is a check to make sure the contact doesn't already exist
contacts.add(new Contact(name, number));
}
我的问题:我无法保存我输入的名字。 name
的值仍然是 一个空字符串,无论我输入什么。
奇怪的是 number
保存正确。为什么会这样?
Edit:此外,如果我直接去掉循环和 switch 语句以及函数和 运行 代码,它工作正常在 main()
.
(我应该分享其他代码吗?)
我被要求包括联系人 class,所以 —
public class Contact {
private String name;
private String number;
public Contact(String name, String number) {
this.name = name;
this.number = number;
System.out.println("Contact created with name " + name + " and number " + number);
}
public Contact(String name) {
this(name, null);
}
public Contact() {
this("J. Doe", null);
System.out.println("ERROR: blank contact somehow generated");
}
public String getName() {
return name;
}
public String getNumber() {
return number;
}
@Override
public String toString() {
return "Contact { \n" +
" name = \"" + name + "\",\n" +
" number = \"" + number + "\"" +
"\n}";
}
}
和 while
循环:
while (true) {
System.out.print("Enter an instruction number: ");
num = phoneScnr.nextInt();
switch (num) {
case 0:
printInstructions();
break;
case 1:
addContact();
break;
case 2:
editContact();
break;
case 3:
removeContact();
break;
case 4:
findContact();
break;
case 5:
listContacts();
break;
case -1:
quit = true;
break;
default:
System.out.println("Sorry, that character is not recognized.");
break;
}
}
尝试读取名称后不再读取扫描仪的行:
public static void addContact() {
System.out.print("Name: ");
String name = scanner.nextLine();
//scanner.nextLine(); <-- here is the reason
System.out.print("Number: ");
String number = scanner.nextLine();
phone.addContact(name, number);
}
我有一个 Phone
class,它只有一个字段:Contact
class 实例的 ArrayList。 Contact
class 只有两个字段:姓名和号码。
当你 运行 程序时,
- 它显示编号的指令
- 您输入一个数字
- 它使用 switch 语句调用执行相应操作的函数,如下所示:
switch (num) {
case 0:
printInstructions();
break;
case 1:
addContact();
break;
}
switch
语句处于 while 循环中。
我已经在函数中放置了提示用户输入信息(如姓名)的代码:
public static void addContact() {
System.out.print("Name: ");
String name = scanner.nextLine();
scanner.nextLine();
System.out.print("Number: ");
String number = scanner.nextLine();
phone.addContact(name, number);
}
phone.addContact()
:
public void addContact(String name, String number) {
//there is a check to make sure the contact doesn't already exist
contacts.add(new Contact(name, number));
}
我的问题:我无法保存我输入的名字。 name
的值仍然是 一个空字符串,无论我输入什么。
奇怪的是 number
保存正确。为什么会这样?
Edit:此外,如果我直接去掉循环和 switch 语句以及函数和 运行 代码,它工作正常在 main()
.
(我应该分享其他代码吗?)
我被要求包括联系人 class,所以 —
public class Contact {
private String name;
private String number;
public Contact(String name, String number) {
this.name = name;
this.number = number;
System.out.println("Contact created with name " + name + " and number " + number);
}
public Contact(String name) {
this(name, null);
}
public Contact() {
this("J. Doe", null);
System.out.println("ERROR: blank contact somehow generated");
}
public String getName() {
return name;
}
public String getNumber() {
return number;
}
@Override
public String toString() {
return "Contact { \n" +
" name = \"" + name + "\",\n" +
" number = \"" + number + "\"" +
"\n}";
}
}
和 while
循环:
while (true) {
System.out.print("Enter an instruction number: ");
num = phoneScnr.nextInt();
switch (num) {
case 0:
printInstructions();
break;
case 1:
addContact();
break;
case 2:
editContact();
break;
case 3:
removeContact();
break;
case 4:
findContact();
break;
case 5:
listContacts();
break;
case -1:
quit = true;
break;
default:
System.out.println("Sorry, that character is not recognized.");
break;
}
}
尝试读取名称后不再读取扫描仪的行:
public static void addContact() {
System.out.print("Name: ");
String name = scanner.nextLine();
//scanner.nextLine(); <-- here is the reason
System.out.print("Number: ");
String number = scanner.nextLine();
phone.addContact(name, number);
}