我正在使用扫描仪获取用户输入。如果用户输入名称,则将其添加到ArrayList。如果用户未输入名称,则我想抛出异常,但我想继续获取答案的循环。

for(int i = 0; i < totalLanes; i++){
    runArr.add(this.addRacer());
}

public static String addRacer() throws NullPointerException{
    System.out.print("Enter a name for a racer: ");//Method uses try catch to catch a    NullPointerException.
    Scanner sc = new Scanner(System.in);
    String rName = null;
    try {
        if(!sc.nextLine().isEmpty()){
            rName = sc.nextLine();
        }else{
            throw new NullPointerException("name cannot be blank");
        }
    }

    catch (NullPointerException e) {
        System.out.println(e.toString());
        System.out.print("Enter a name for a racer: ");
        addRacer();
    }
    return rName;
}



为什么要无限递归?
从用户检索输入但使
确定他们输入的是有效数据?


提前致谢。

最佳答案

问题是您读取了两次输入。
我的意思是您在代码中有两次调用sc.nextLine()方法。
尝试以下方法:

String rName = sc.nextLine();
try {
    if(rName.isEmpty()){
        throw new NullPointerException("Name cannot be blank.");
    }
}

08-28 23:52