我写了一个名称检查器,它使用for循环来检查字符串中的每个字符是否都是一个字母,我在for循环中写了一条if语句,声明如果满足if语句条件,打印&#34 ;你的名字有效!"并打破。但如果条件不满足,请重新运行循环。
public static void nameValid() {
Scanner in = new Scanner(System.in);
System.out.println("Enter your name");
String name = in.nextLine();
int q = name.length();
for (int i = 0; i < name.length(); i++) {
if (Character.isLetter(name.charAt(i)) && q >= 2) {
System.out.println("Your name is valid!");
break;
} else {
System.out.println("Your name is invalid! Please enter a valid name!");
nameValid();
}
}
}
如果我第一次输入有效字符串,一切都很好,然后转到第二种方法。如果我输入一个无效的字符串,它会给我预期的错误消息并重新运行循环。但是当我在那之后输入一个有效的字符串时,它会不断地运行循环。我得到的输出是:
Enter your name
123
Your name is invalid! Please enter a valid name!
Enter your name
fred
Your name is valid!
Your name is invalid! Please enter a valid name!
Enter your name
答案 0 :(得分:4)
它没有重新运行循环...它正在进入一个递归函数调用。
(请在下次使用调试器。)
答案 1 :(得分:1)
在else
块中,您在循环内递归调用nameValid
函数。因此,当您最终输入有效名称并点击break
行时,最初调用该函数的循环将继续。