如何跳出多层嵌套for循环?带标签break失效问题求助
如何跳出多层嵌套for循环?
你当前代码的问题在于:break loop1执行后,程序会直接跳出最外层的loop1循环,后续的break loop2和break loop3永远不会被执行,所以编辑器会标灰提示这些代码不可达。
要实现跳出多层嵌套循环,有几种简洁的方案:
方案1:直接跳出最外层标签循环
只需要保留break loop1;即可,跳出最外层循环后,所有内层循环会自然终止,无需额外break其他层:
loop1: for(j=0;j<players.x.length;j++){ // something loop2: for(k=0;k<tankmain[players.type[j]].tankbottom.size.length;k++){ // something else loop3: for(i=0;i<darts.x.length;i++){ if(hit){ // something break loop1; // 直接跳出最外层循环,所有内层循环同步终止 } } } }
方案2:使用标志变量控制循环
如果不想用标签,可以在外层作用域定义一个标志变量,每层循环都判断该变量:
let stopAllLoops = false; for(j=0;j<players.x.length && !stopAllLoops;j++){ // something for(k=0;k<tankmain[players.type[j]].tankbottom.size.length && !stopAllLoops;k++){ // something else for(i=0;i<darts.x.length;i++){ if(hit){ // something stopAllLoops = true; break; // 先跳出最内层循环 } } } }
方案3:封装为函数,用return终止
把嵌套循环放到独立函数中,满足条件时直接return,函数终止后所有循环都会结束:
function checkCollision() { for(j=0;j<players.x.length;j++){ // something for(k=0;k<tankmain[players.type[j]].tankbottom.size.length;k++){ // something else for(i=0;i<darts.x.length;i++){ if(hit){ // something return; // 直接终止函数,所有循环同步结束 } } } } } // 调用函数触发逻辑 checkCollision();
内容的提问来源于stack exchange,提问作者magic gum
相关产品推荐
相关产品推荐

