为什么我不能在函数中保存来自 Scanner 的用户输入?

Why can't I save user input from Scanner inside a function?

我有一个 Phone class,它只有一个字段:Contact class 实例的 ArrayList。 Contact class 只有两个字段:姓名和号码。
当你 运行 程序时,


    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);
}