java - break 语句的控制流如何在嵌套循环中工作?(爪哇)
问题描述
我用 Java 编程已经有一段时间了,但是今天我遇到了一些我认为很奇怪的事情。我记得当在嵌套循环中使用 break 语句时,控制流会返回到外部循环的头部。如图所示。
控制流程图(我知道你们喜欢内联,但根据声誉要求,我是不允许的)
也许,这个图形和我的记忆是不正确的。我这样说是因为当我运行以下代码时,控制流会将每个标记添加到 LinkedList listOfAllPalindromes。我已经验证了包含 break 语句的 if 块在它应该被访问的时候被访问。简而言之,我的记忆错了吗,当它遇到 break 语句时的控制流是否应该像它看起来正在做的那样跳转到 listOfAllPalindromes.add(token) ?
public static void main(String[] args) throws FileNotFoundException {
File dictionary = new File("english3.txt");
Scanner s = new Scanner(dictionary);
String token;
LinkedList<String> listOfPalindromes = new LinkedList<>();
while (s.hasNext())
{
token = s.next().toLowerCase();
for (int i = 0; i <= (token.length()-1)/2; i++)
{
if(token.charAt(i) != token.charAt(token.length()-(i+1)))
{
break;
}
}
listOfPalindromes.add(token);
}
for(String word : listOfPalindromes)
{
System.out.println(word);
}
}
解决方案
您应该使用continue
标签而不是break
这样。
Scanner s = new Scanner("lever level canoe kayak carrace racecar mademoiselle madam");
String token;
LinkedList<String> listOfPalindromes = new LinkedList<>();
L: while (s.hasNext()) {
token = s.next().toLowerCase();
for (int i = 0; i <= (token.length() - 1) / 2; i++) {
if (token.charAt(i) != token.charAt(token.length() - (i + 1))) {
continue L;
}
}
listOfPalindromes.add(token);
}
for (String word : listOfPalindromes) {
System.out.println(word);
}
输出
level
kayak
racecar
madam
推荐阅读
- javascript - 检查字符长度并在它太长时将其剪掉的函数
- android - 反正有没有使用应用程序包名称获取 android 应用程序图标、应用程序名称和应用程序描述?
- ipad - 启用 SplitView 和 MultiTask iPad 混合应用程序。丢弃交互
- javascript - 如果 HTML 容器包含特定元素,如何拆分它?
- python - 尝试对功能进行计时
- keycloak - 想要在存在多个凭据的情况下发送 otp 的 Keycloak Rest API 请求格式
- javascript - Ajax Delete 在 laravel 6 中给出 405(不允许的方法)
- javascript - 如何为 ngrx/data 中的操作编写效果?
- javascript - 从字符串生成 0 到 1 之间的确定性哈希数
- python - Django restframework,未提供身份验证凭据,knox-tokenauthentication