为什么不能将来自Scanner的用户输入保存在功能中?

问题描述

我有一个Phone类,它只有一个字段:Contact类实例的ArrayList。 Contact类只有两个字段:名称和数字。
运行程序时,

  • 显示编号的指令
  • 您输入一个数字
  • 调用函数使用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已正确保存。为什么会这样?


编辑:另外,如果我摆脱了循环,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);
}