为什么这个方法重复循环?

时间:2014-06-19 23:47:32

标签: java while-loop

此方法从用户检索并验证社会安全号码。如果输入有效,它可以正常工作。如果没有,while (true)重复而不是转到

else {
    System.out.println("Make sure the social security number is valid.");
}

语句。

以下是方法:

public static String getSSN(Scanner sc, String prompt) {
        String ssn = "";

        while (true) {
            System.out.println(prompt);
            if(sc.hasNext()) {
                ssn = sc.next();
                if(ssn.length() == 11 
                    && checkNumeric(ssn.substring(0, 3)) 
                    && "-".equalsIgnoreCase(ssn.substring(3, 4))
                    && checkNumeric(ssn.substring(4, 6)) 
                    && "-".equalsIgnoreCase(ssn.substring(6, 7)) 
                    && checkNumeric(ssn.substring(7, 11)))
                    break;
            }
            else {
                System.out.println("Make sure the social security number is valid.");
            }
        }
        return ssn;       
    }

这是输出:

Enter a Social Security Number: 
23
Enter a Social Security Number: 
4
Enter a Social Security Number: 
2

2 个答案:

答案 0 :(得分:2)

包围不正确。 else分支属于if(sc.hasNext())条件。要使代码有效,请将其移至适当的位置:

public static String getSSN(Scanner sc, String prompt) {
    String ssn = "";

    while (true) {
        System.out.println(prompt);
        if(sc.hasNext()) {
            ssn = sc.next();
            if(ssn.length() == 11 
                && checkNumeric(ssn.substring(0, 3)) 
                && "-".equalsIgnoreCase(ssn.substring(3, 4))
                && checkNumeric(ssn.substring(4, 6)) 
                && "-".equalsIgnoreCase(ssn.substring(6, 7)) 
                && checkNumeric(ssn.substring(7, 11))) {
                break;
            } else {
                System.out.println("Make sure the social security number is valid.");
            }
        }            
    }
    return ssn;       
}

将一行语句包含在括号中也是一个好习惯。如果分支发生变化并添加了其他命令,它会使代码更清晰,也更不容易出错。

答案 1 :(得分:0)

我认为你应该做的事情如下:

while(sc.hasNext()) ...