Java 如果还是异常?

Java if or exception?

static void getFirstName() {
    System.out.println("Please enter Client's first name"); 
    String sFirstName = sc.nextLine().toUpperCase();
    monthlyRates.setFirstName(sFirstName);   
        System.out.println("You wrote " 
                + sFirstName 
                + " is that correct? \n"
                + "Y or N");

    String sYesNo = sc.next().toUpperCase();
        if (!"N".equals(sYesNo) && !"Y".equals(sYesNo)) {
            System.out.println("Please enter Y or N");
            //re-run this snippet. Can this be nested? 
        }else ("N".equals(sYesNo)){
            getFirstName();
        }
    }
}  

我想在上面添加一些错误检查。如果 sFirstName 是正确的,由 Y 确认,那么它将移至下一段代码。如果是 N,它会重新运行代码。如果不是 Y 或 N,它会重新运行 if。

我查看了例外情况,但不确定它们是否适合上述情况?如有任何帮助,我们将不胜感激!

谢谢,

我给你举了几个例子 - 也许你喜欢其中的一些。 我个人的意见是尽可能少地使用异常,因为它们会非常异常地中断您的控制流,并且可能非常无例外,它们必须被捕获(在运行时异常上可能很棘手 - 因为您必须知道您正在调用的代码 - 这是不是信息隐藏)和 try catch 块与简单的 if 语句相比非常难看 :-) 但代码:

private boolean confirmFirstName(String firstName) {
    System.out.println("You wrote "
            + firstName
            + " is that correct? \n"
            + "Y or N");
    final String answer = sc.next().toUpperCase();
    return answer.equalsIgnoreCase("y");
}

private String enterFirstName() {
    System.out.println("Please enter Client's first name");
    final String sFirstName = sc.nextLine().toUpperCase();
    return sFirstName;
}

private void getFirstNameV1() {
    final int maxTrials = 5;
    // loop for max trials times and break if input is correct
    for (int i = 0; i < maxTrials; i++) {
        final String firstName = enterFirstName();
        if (confirmFirstName(firstName)) {
            setMonthlyRates(firstName);
            break;
        }
    }
}

private void getFirstNameV2() {
    final String firstName = enterFirstName();
    final boolean valid = confirmFirstName(firstName);
    // use a recursive function but take care,
    // there is no exit instead of entering a valid value otherwise you are in an infinite loop
    if (valid) {
        setMonthlyRates(firstName);
    } else {
        getFirstNameV2();
    }
}

private void getFirstNameV3() {
    // first time input
    String firstName = enterFirstName();
    boolean valid = confirmFirstName(firstName);
    // if not valid loop until its valid, there is also no exit of this loop
    while (!valid) {
        firstName = enterFirstName();
        valid = confirmFirstName(firstName);
    }
    setMonthlyRates(firstName);
}

private void getFirstNameV4() {
    // first time input
    String firstName = enterFirstName();
    boolean valid = confirmFirstName(firstName);
    final int maxTrials = 5;
    // if not valid loop for max trials times
    for (int i = 0; i < maxTrials || valid; i++) {
        firstName = enterFirstName();
        valid = confirmFirstName(firstName);
    }
    if (valid) {
        setMonthlyRates(firstName);
    }
}

private void setMonthlyRates(String firstName) {
    monthlyRates.setFirstName(firstName);
}