A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王川 中级黑马   /  2013-4-3 00:01  /  14459 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                                if () {
                                      ……                                }
                        }     //内层for结束
                        ……//重点区
                }

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

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
冯海霞 + 1
随便 + 3 赞一个!

查看全部评分

11 个回复

倒序浏览
  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 08:31

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
王川 + 10 赞一个!
冯海霞 + 1

查看全部评分

回复 使用道具 举报
for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                                if () {
                                      ……                                }
                        }     //内层for结束//可以在这里加上一个break;
                        ……//重点区
                }
就是如图在重点区前加上 break;



点评

按照你说的,不是将外循环break掉了吗。再想想  发表于 2013-4-3 00:35
回复 使用道具 举报
补充一下:
break 跳出,中断
break 关键字用于提前退出 for、while 或 do 循环,或者在 switch 语句中用来结束 case 块。
break 总是退出最深层的 while、for、do 或 switch 语句。
回复 使用道具 举报
梁志兵 发表于 2013-4-3 00:16
for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                 ...

加break不是跳出整个循环么???
回复 使用道具 举报
可以将外层标识一下,用break直接跳过去
a:  for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                                if () {   break a;
                                      ……                                }
                        }     //内层for结束
                        ……//重点区
                }

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
黑马-郑玉元 发表于 2013-4-3 00:18
加break不是跳出整个循环么???

我错了 理解错楼主的问题了
回复 使用道具 举报
梁志兵 发表于 2013-4-3 00:16
for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                 ...

嗯 刚才看了才知道我错了
回复 使用道具 举报
a:for(;;){
    b:for(;;){
    }
}
正常情况下,break和continue都是处理与他最近的循环
对于这种情况只能用break a或者break b来控制

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
break:是结束for循环.
continue:是结束for循环中的某一次循环。
你的这种情况可以添加标记来解决 如下:
a: for () {// 外层for
                        for (i = 0; i < j; i++){      //内层for
                                if () {
                                      ……                           continue a; }
                        }     //内层for结束
                        ……//重点区
                }

这样就不会执行“重点区”  而是执行外for循环的下一次循环,
如果写的是break a; 就会结束整个(两个for循环)循环。

评分

参与人数 1黑马币 +10 收起 理由
王川 + 10 赞一个!

查看全部评分

回复 使用道具 举报
呵呵,跳出内循环很简单
  1. if(...){
  2.             i=j;
  3. }
复制代码
回复 使用道具 举报
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结束
                        ……//重点区
                }

评分

参与人数 1黑马币 +10 收起 理由
王川 + 10 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马