此方法从用户检索并验证社会安全号码。如果输入有效,它可以正常工作。如果没有,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
答案 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()) ...