Java next()和nextLine错误

Java next()和nextLine错误,java,next,phonebook,Java,Next,Phonebook,我试图用Java实现一个带有ArrayList的电话簿,但每当我试图使用next()或nextLine()获取用户信息时,我都会出错。这是收集和保存用户输入的方法 public void saveContact() { String[] userInput = new String[3]; String[] input = {"name", "age", "phone number"};

我试图用Java实现一个带有ArrayList的电话簿,但每当我试图使用next()或nextLine()获取用户信息时,我都会出错。这是收集和保存用户输入的方法

public void saveContact() {
        String[] userInput = new String[3];
        String[] input = {"name", "age", "phone number"};
        String[] pattern = {".", "\\d", ".+\\d+"};
        for(int i=0; i < 3; i++) {
            try (Scanner sc = new Scanner(System.in)) {
                String name = "";
                while(!verifyUserInput(name, pattern[i])) {
                    System.out.printf("Enter contact's %s\n", input[i]);
                    name = sc.nextLine();
                userInput[i] = name;
                }
            }
        }
        phoneArrayList.add(userInput);
    }
当我使用next()时,我得到

我尝试过像这样使用hasNext()和hasNextLine(),但它只会导致无限循环。我不知道我应该使用什么来获得用户输入而不会出现错误

if(sc.hasNext()) {
    name = sc.next();
}
这是verifyUserInput方法

public boolean verifyUserInput(String input, String patt) {
        Pattern pattern = Pattern.compile(patt);
        Matcher m = pattern.matcher(input);
        return m.find();
    }

公开课考试{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
字符串[]用户输入=新字符串[3];
字符串[]输入={“姓名”、“年龄”、“电话号码”};
字符串[]模式={“,”\\d“,“+\\d+”};
布尔值isAllInputValid=true;
对于(int i=0;i<3;i++){
System.out.printf(“输入联系人的%s\n”,输入[i]);
if(scan.hasNextLine()){
字符串inputStr=scan.nextLine();
如果(!verifyUserInput(inputStr,模式[i])){
isAllInputValid=false;
打破
}
userInput[i]=inputStr;
System.out.println(“联系人的”+input[i]+“是”+inputStr);
}
}
如果(IsalInputValid){
System.out.println(“userInput=“+Arrays.toString(userInput));
}
}
公共静态布尔verifyUserInput(字符串输入,字符串模式){
Pattern=Pattern.compile(patt);
匹配器m=模式匹配器(输入);
返回m.find();
}
}

您是如何执行此程序的?您是通过命令行传递值还是在某处提交代码?这是否回答了您的问题?
if(sc.hasNext()) {
    name = sc.next();
}
public boolean verifyUserInput(String input, String patt) {
        Pattern pattern = Pattern.compile(patt);
        Matcher m = pattern.matcher(input);
        return m.find();
    }

public class Test {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        String[] userInput = new String[3];
        String[] input = {"name", "age", "phone number"};
        String[] pattern = {".", "\\d", ".+\\d+"};

        boolean isAllInputValid = true;
        for (int i = 0; i < 3; i++) {
            System.out.printf("Enter contact's %s\n", input[i]);
            if (scan.hasNextLine()) {
                String inputStr = scan.nextLine();
                if (!verifyUserInput(inputStr, pattern[i])) {
                    isAllInputValid = false;
                    break;
                }
                userInput[i] = inputStr;
                System.out.println("contact's  " + input[i] + " is " + inputStr);
            }
        }
        if (isAllInputValid) {
            System.out.println("userInput = " + Arrays.toString(userInput));
        }

    }

    public static boolean verifyUserInput(String input, String patt) {
        Pattern pattern = Pattern.compile(patt);
        Matcher m = pattern.matcher(input);
        return m.find();
    }
}