Java嵌套for循环中如何同时让两层循环执行continue操作?
Java嵌套循环同时执行两层continue的实现方案
Java语法本身没有原生支持“同时continue两层循环”的关键字,不过有两种常用实现方式可以达到相同效果,且你担心的标签跳转效率问题其实不存在——Java的标签跳转属于编译期语法糖,运行时和普通流程控制的性能没有差异。
方案1:带标签的continue(推荐)
直接给外层循环添加自定义标签,内层满足条件时直接continue外层标签,即可直接终止当前内层循环、同时让外层进入下一轮迭代,代码示例如下:
public class StringMerger { public static boolean isMerge(String s, String part1, String part2) { StringBuilder MergedWord = new StringBuilder(""); String Whole = part1+part2; // 给外层循环添加标签 outerLoop: for(int j = 0; j < Whole.length(); j++){ for(int I = 0; I < part1.length(); I++){ if((Character.compare(s.charAt(j), part1.charAt(I)) == 0) && (j == I)){ MergedWord.append(s.charAt(I)+""); // 直接continue外层标签,同时终止内层循环、触发外层下一轮迭代 continue outerLoop; } else break; } for(int i = 0; i < part2.length(); i++){ if((Character.compare(s.charAt(j), part2.charAt(i)) == 0) && (j == i)){ MergedWord.append(part2.charAt(i) + ""); // 同样触发外层下一轮 continue outerLoop; } else break; } } return s.equals(MergedWord.toString()); } }
另外你原代码末尾的三元运算符? true : false是冗余的,s.equals(...)本身就返回布尔值,可以直接返回。
方案2:状态标记变量(不想用标签时可选)
如果不想用标签语法,可以新增布尔变量标记是否需要触发外层continue,实现逻辑如下:
public class StringMerger { public static boolean isMerge(String s, String part1, String part2) { StringBuilder MergedWord = new StringBuilder(""); String Whole = part1+part2; for(int j = 0; j < Whole.length(); j++){ boolean needContinueOuter = false; for(int I = 0; I < part1.length(); I++){ if((Character.compare(s.charAt(j), part1.charAt(I)) == 0) && (j == I)){ MergedWord.append(s.charAt(I)+""); needContinueOuter = true; break; } else break; } if (needContinueOuter) { continue; } for(int i = 0; i < part2.length(); i++){ if((Character.compare(s.charAt(j), part2.charAt(i)) == 0) && (j == i)){ MergedWord.append(part2.charAt(i) + ""); needContinueOuter = true; break; } else break; } if (needContinueOuter) { continue; } } return s.equals(MergedWord.toString()); } }
这种方式和标签方案的运行效率基本一致,只是多了几次布尔判断,可读性略差一些。
内容的提问来源于stack exchange,提问作者TheGuradian
相关产品推荐
相关产品推荐

