Java 我在Scanner.nextLine()之后输入Scanner.nextLine()以使用新行,但它不工作

Java 我在Scanner.nextLine()之后输入Scanner.nextLine()以使用新行,但它不工作,java,arraylist,java.util.scanner,Java,Arraylist,Java.util.scanner,我目前正在使用Tim Bulchalka的UDE学习Java编程。确切地说,我的课程是完整的Java Masterclass,我正在学习ArrayList 我正在尝试编写一个类似手机的应用程序,其中可以包含联系人号码 这是我的主要srcor,你叫它什么?减去一些遇到相同问题的无关或代码: package com.timbuchalka; import java.util.Scanner; public class Main { private static Scanner scanner2

我目前正在使用Tim Bulchalka的UDE学习Java编程。确切地说,我的课程是完整的Java Masterclass,我正在学习ArrayList

我正在尝试编写一个类似手机的应用程序,其中可以包含联系人号码

这是我的主要srcor,你叫它什么?减去一些遇到相同问题的无关或代码:

package com.timbuchalka;

import java.util.Scanner;

public class Main {

private static Scanner scanner2 = new Scanner(System.in);

public static void main(String[] args) {
    MobilePhone phone = new MobilePhone();
    boolean quit = false;
    int choice = 0;
    printInstructions();
    while(!quit) {
        System.out.println("What do you want to do?");
        choice = scanner2.nextInt();
        scanner2.nextLine();

        switch (choice) {
            case 1:
                phone.printContact();
                break;
            case 2:
                phone.addContact();
                break;
            ........
            case 7:
                quit = true;
                break;
        }
    }
}

public static void printInstructions() {
    System.out.println("\nPress ");
    System.out.println("\t 0 - To see instructions again.");
    System.out.println("\t 1 - To see all contacts.");
    System.out.println("\t 2 - To add new contact.");
    ......
    System.out.println("\t 7 - To quit the application.");
}
}

这是我在MobilePhone类中的联系人类:

package com.timbuchalka;

import java.util.ArrayList;
import java.util.Scanner;

public class Contacts {

private static Scanner scanner = new Scanner(System.in);

private ArrayList<Integer> listPhoneNumber = new ArrayList<Integer>();
private ArrayList<String> listName = new ArrayList<String>();

public void addContact() {
    System.out.println("Please enter the contact name: ");
    String name = scanner.nextLine();
    System.out.println("Please enter the contact number: ");
    int number = scanner.nextInt();
    addContact(name, number);
}

public void printContacts() {
    System.out.println("Contact Details:");
    for (int i=0; i<listPhoneNumber.size(); i++) {
        System.out.println((i+1) + ". " + listName.get(i) + " - " + listPhoneNumber.get(i));
    }
    System.out.println("\t");
}

private void addContact(String name, int number) {
    listName.add(name);
    listPhoneNumber.add(number);
}

我能知道为什么会这样吗?还有,我可以知道如何解决这个问题吗?多谢各位

每次调用scanner.nextLine时,请使用scanner.nextLine跟随它,以便吞没线尾标记。

从扫描仪读取数据时,我发现最好始终使用nextLine,然后手动解析数据

这使您能够始终如一地使用整行数据。您可以更仔细地解析用户输入


因此,在您的情况下,不使用nextLine读取选项,而是使用nextLine,然后使用Integer.parseInt。

您没有在addContact中的nextInt之后调用nextLine。@DodgyCodeException啊,是的!非常感谢!我很抱歉为一个重复的问题创建了另一个帖子。
Press 
     0 - To see instructions again.
     1 - To see all contacts.
     2 - To add new contact.
     3 - To modify a contact's name.
     4 - To modify a contact's number.
     5 - To remove a contact's details.
     6 - To search for a contact's details.
     7 - To quit the application.
What do you want to do?
1
Contact Details:

What do you want to do?
2
Please enter the contact name: //the 1st time it doesn't skip this step
John
Please enter the contact number: 
12345
What do you want to do?
2
Please enter the contact name: // however during the 2nd time, this step is skipped
Please enter the contact number: 
3
What do you want to do?
1
Contact Details:
1. John - 12345
2.  - 3