黑马程序员技术交流社区

标题: 关于双重for循环跳出的问题 [打印本页]

作者: 王川    时间: 2013-4-3 00:01
标题: 关于双重for循环跳出的问题
                for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                                if () {
                                      ……                                }
                        }     //内层for结束
                        ……//重点区
                }

现在有一个问题是:如何在if处出现某种情况时,跳出内循环,到外循环继续执行,而该次不执行“重点区”的代码

作者: 随便    时间: 2013-4-3 00:13
  1. for () {
  2.                         boolean flag = false;
  3.                         for (){
  4.                                 if () {
  5.                                                 flag = true;
  6.                                                 break;
  7.                                 }
  8.                         }
  9.                         if(flag)
  10.                                 continue;
  11.                         //。。。重点代码
  12.                 }
复制代码
因为java只是保留了goto关键字,但是还没有正式使用,因为在c,c++程序中的臭名昭著,使得不敢用。
所以最要不要使用goto,和标记。比如break out;continue out;不建议。

所以在外层循环中定义一个标记,在内存循环中需要跳出内存循环又需要跳过外层循环的当前迭代,就在内存循环将标记改一下。在外层循环中可以判断,然后满足则continue。
作者: 梁志兵    时间: 2013-4-3 00:16
for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                                if () {
                                      ……                                }
                        }     //内层for结束//可以在这里加上一个break;
                        ……//重点区
                }
就是如图在重点区前加上 break;




作者: 梁志兵    时间: 2013-4-3 00:17
补充一下:
break 跳出,中断
break 关键字用于提前退出 for、while 或 do 循环,或者在 switch 语句中用来结束 case 块。
break 总是退出最深层的 while、for、do 或 switch 语句。

作者: 黑马-郑玉元    时间: 2013-4-3 00:18
梁志兵 发表于 2013-4-3 00:16
for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                 ...

加break不是跳出整个循环么???
作者: HM何伟    时间: 2013-4-3 00:35
可以将外层标识一下,用break直接跳过去
a:  for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                                if () {   break a;
                                      ……                                }
                        }     //内层for结束
                        ……//重点区
                }
作者: 梁志兵    时间: 2013-4-3 00:38
黑马-郑玉元 发表于 2013-4-3 00:18
加break不是跳出整个循环么???

我错了 理解错楼主的问题了
作者: 梁志兵    时间: 2013-4-3 00:39
梁志兵 发表于 2013-4-3 00:16
for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                 ...

嗯 刚才看了才知道我错了
作者: 疯狂程序    时间: 2013-4-3 00:52
a:for(;;){
    b:for(;;){
    }
}
正常情况下,break和continue都是处理与他最近的循环
对于这种情况只能用break a或者break b来控制
作者: 田光峰    时间: 2013-4-3 10:15
break:是结束for循环.
continue:是结束for循环中的某一次循环。
你的这种情况可以添加标记来解决 如下:
a: for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                                if () {
                                      ……                           continue a; }
                        }     //内层for结束
                        ……//重点区
                }

这样就不会执行“重点区”  而是执行外for循环的下一次循环,
如果写的是break a; 就会结束整个(两个for循环)循环。
作者: 张源锋    时间: 2013-4-3 12:41
呵呵,跳出内循环很简单
  1. if(...){
  2.             i=j;
  3. }
复制代码

作者: 杨武林    时间: 2013-4-3 13:07
break 和continue都可以有一个可选择的标号,它用来告诉Java从哪里开始继续执行程序。没有标号的时候,break在嵌套循环中会跳出最近的循环,进入到包含这层循环的外层循环中,或者在单层循环中跳到循环外的下一条语句上。而continue重新进行它所在层次的循环。使用带标号的break 和continue后,你可以用break进入到嵌套循环外的某个位置,或用continue来进入当前循环的外层循环中。要使用标号的循环,在循环的开始部分前面加标号,在标号和循环之间带有一个冒号。然后当你使用break 或continue时,在它们后面加上标号的名字。
   for () {// 外层for
                        out  for (i = 0; i < j; i++){      //内层for
                                if () {
                                              break out
                                      ……                                }
                        }     //内层for结束
                        ……//重点区
                }






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2