问题描述
我有一个Phone
类,它只有一个字段:Contact
类实例的ArrayList。 Contact
类只有两个字段:名称和数字。
运行程序时,
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
已正确保存。为什么会这样?
编辑:另外,如果我摆脱了循环,switch语句和函数,并直接在main()
中运行代码,则可以正常工作。
我被要求包括Contact类,所以-
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);
}