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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


  在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句,即可跳出外层循环。例如,

ok:

   for(int i=0;i<10;i++)

   {

         for(int j=0;j<10;j++)

         {

               System.out.println(“i=” + i + “,j=” + j);

               if(j == 5) break ok;

         }

   }

另外,我个人通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。

int arr[][] = {{1,2,3},{4,5,6,7},{9}};

boolean found = false;

for(int i=0;i<arr.length && !found;i++)

   {

         for(int j=0;j<arr[i].length;j++)

         {

               System.out.println(“i=” + i + “,j=” + j);

               if(arr[i][j]  == 5)

               {

                     found = true;

                     continue;

               }

         }

   }
貌似有点问题,可就是找不出来。帮帮我啊


8 个回复

倒序浏览
哥们,你肿么这么多问题啊~~~~~~
   
int arr[][] = {{1,2,3},{4,5,6,7},{9}};

                boolean found = false;

                for(int i=0;i<arr.length && !found;i++)

                   {

                         for(int j=0;j<arr.length;j++)

                         {

                               System.out.println("i=" + i + ",j=" + arr[j] );//注意这地方

                               if(arr[j]  == 5)

                               {

                                     found = true;

                                     continue;

                               }

                         }

                   }
回复 使用道具 举报
public static void main(String []args){
                int arr[][] = {{1,2,3},{4,5,6,7},{9}};

                boolean found = false;

                for(int i=0;i<arr.length && !found;i++)

                   {

                         for(int j=0;j<arr[i].length;j++)

                         {

                               System.out.println("i=" + i + ",j=" + j);

                               if(arr[i][j]  == 5)

                               {
                                               System.out.println(arr[i][j]);
                                     found = true;

                                     break;

                               }

                         }

                   }
      
}

这个就可以了。break是直接跳出整个内层循环。而continue只是把本次内层循环跳出,执行j++,然后继续内层循环。
这个思路很好啊。通过内层循环变量的改变来改变外层循环的执行与否。赞一个。
回复 使用道具 举报
也不知道,你到底问的是什么问题,另一个问题解决,遇到5就结束的话,只要再在第二个for循环里也加个判断就行

for(int j=0;j<arr[i].length&& !found;j++)

                         {

                               System.out.println("i=" + i + ",j=" + arr[i][j]);

                               if(arr[i][j]  == 5)

                               {

                                     found = true;

                                     continue;

                               }

                         }
回复 使用道具 举报
输出是
i=0,j=1
i=0,j=2
i=1,j=0
i=1,j=1
5
结果没错吧?
回复 使用道具 举报
首先
System.out.println(“i=” + i + “,j=” + j);//这一行的“”打错了,应该是" "。
程序上的问题楼主是觉得什么呢?
continue是跳出当前循环,进行下一次循环,当arr[][]==5的时候程序跳出,进行了一次j++,还是把内层的循环走完了,但是你把found的值赋成true了,外层循环的条件就判断不成功了,程序就停止了,我给你加了一句输出 arr[i][j]的语句,运行如下:
class Demo1
{
        public static void main (String [] args) {
                int arr[][] = {{1,2,3},{4,5,6,7},{9}};

        boolean found = false;

        for(int i=0;i<arr.length && !found;i++)

   {

         for(int j=0;j<arr[i].length;j++)

         {

               System.out.println("i=" + i + ",j=" + j);

                               
               if(arr[i][j]  == 5)

               {

                    found = true;
                                        continue ;
                           }
                          
               System.out.println(arr[i][j]+",");      

               

         }

   }

        }
       
}
结果是:
i=0,j=0
1,
i=0,j=1
2,
i=0,j=2
3,
i=1,j=0
4,
i=1,j=1
i=1,j=2
6,
i=1,j=3
7,


回复 使用道具 举报
我可以这样认为你的需要是使用双层循环来查找是否满足某个条件,如果满足了 直接退出全部循环
下边是我写的代码:
class Break {
        public static void main(String[] args) {
                char[][] arrChar = { { 'a', 'b', 'c', 'd' }, { 'e', 'f', 'g', 'h' },
                                { 'i', 'j', 'k', 'l' }, { 'm', 'n', 'o', 'p', 'q' } };
                char x = 'f';
                System.out.println(found(arrChar,x));
        }
// 查找二维char数组中是否包含有X;
        static boolean found(char[][] arrChar, char x) {
                boolean result = false;
                boolean f = true;
                        for (int j = 0; j < arrChar.length&f; j++) {
                                for (int k = 0; k < arrChar[j].length; k++) {
                                        if (x == arrChar[j][k]) {
                                                f = false;                                //注意这里,当条件满足时,返回结果然后结束内循环,而且通过修改外部循环条件F达到结束外部循环的目的
                                                result = true;
                                                break;
                                        }
                                }
                        }
               
                return result;
        }
}
运行结果为true
回复 使用道具 举报
肖琦 中级黑马 2012-7-24 00:47:07
8#
看了你说的,有点不明白你到底想说什么,不知道你是不是想说走了if判断,内外循环就全停,如果是的话,你将if里面的continue改为break;continue是结束本次循环执行下次循环,因此还会执行内层循环;break则是直接跳出本循环体;
个人感觉其实用标记还简洁实用点。

回复 使用道具 举报
对于楼主的问题可以有两种解决方法:
方法一:
int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++)
   {
         for(int j=0;j<arr.length ;j++)
         {
               System.out.println(“i=” + i + “,j=” + j);
               if(arr[j]  == 5)
               {
                     found = true;// found 只在外层循环内有作用。你这里把他改为true是为了下一次外循环做判断,以便跳出外循环。
      
                     continue;//这里的continue只是结束当前循环,进入下次循环。在这里是不能跳出内循环的。
                                   //这里即使arr[j] == 5  了内部循环还是会继续的。所以这里就不能做到当条件满足后立即跳出整个外循环。
                                  //这里应该用break跳出内部循环,进入外部循环的下次循环。执行 i++,再判断 i<arr.length && !found 因为found = true,
                                  //所以整个表达式为false 所以条件不满足跳出整个循环。
               }
         }
   }


方法二:
如果楼主你想用continue 语句跳出整个外部循环的话也可以,楼主你的想法很好,通过内层循环对变量的改变来改变外层循环的执行与否,我很赞同。
同时定义的变量也可以控制内部循的执行与否呀!!!你可以让 found 同时控制内部循环的判断语句    j<arr.length && !found  ,这样当执行continue后内部循环就会结束,
进入外部循环,同样的外部循环也会判断i<arr.length && !found结果为false跳出外循环,这样就做到了当条件满足后就跳出整个循环了!


int arr[][] = {{1,2,3},{4,5,6,7},{9}};
boolean found = false;
for(int i=0;i<arr.length && !found;i++)
   {
         for(int j=0;j<arr.length && !found;j++)
         {
               System.out.println(“i=” + i + “,j=” + j);
               if(arr[j]  == 5)
               {
                     found = true;
      
                     continue;
               }
         }
   }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马