黑马程序员技术交流社区

标题: 关于continue循环的问题 [打印本页]

作者: 王桂丽    时间: 2012-7-22 18:43
标题: 关于continue循环的问题
本帖最后由 王桂丽 于 2012-7-22 19:03 编辑

/*
需求:1、查看continue的特点:结束本次循环,继续下一次循环
   2、查看continue怎样执行
思路与步骤:1、通过两个for循环,当在内循环遇到continue后看是否会结束内循环,
      开始执行外循环
   2、在内循环continue之前打印y的值,为了区分,设为y1,查看在遇到continue
      之前,语句如何执行
   3、在内循环continue之后打印y的值,设为y2,查看当遇到continue后,语句如何执行
*/
class  Continue
{
public static void main(String[] args)
{
  for(int x=0;x<3;x++) //设置外层循环
System.out.println("x="+x);
  {
   
    for(int y=0;y<4;y++)//设置内层循环
   {
     System.out.println("y1="+y);//打印y的值,为了与continue语句之后的y的值区分,用y1接收
    continue;
   
      // System.out.println("y2="+y);//打印在遇到continue之后,y的值变化,并用y2接收
   
   }
  
  }
}
}
                                                                           一、暂不执行continue之后的值时的结果

file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/2531988876/QQ/WinTemp/RichOle/2QO7U{9GQ`Z$X]B_}9EYOHU.jpg




疑问:为什么遇到continue没有结束内循环,转而执行外循环?为什么不是以下结果?
x=0
y=0
x=1
y=0
x=2
y=0






class  Continue
{
public static void main(String[] args)
{
  for(int x=0;x<3;x++) //设置外层循环
  {
       System.out.println("x="+x);
    for(int y=0;y<4;y++)//设置内层循环
   {
     System.out.println("y1="+y);//打印y的值,为了与continue语句之后的y的值区分,用y1接收
    continue;
   
      System.out.println("y2="+y);//打印在遇到continue之后,y的值变化,并用y2接收
   
   }
  
  }
}
}


                                                  二、继续执行continue之下的语句编译时的结果




file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/2531988876/QQ/WinTemp/RichOle/V2{I~II(4(BNLV{(}1XFS%T.jpg


疑问:为什么无法访问continue之后的语句?如果continue之下的语句均无效,那也应该可以编译只是执行时执行不到该语句而无法输出啊。具体原因是什么?最后能解释一遍执行顺序,谢谢!





未命名2.jpg (9.25 KB, 下载次数: 51)

未命名2.jpg

未命名1.jpg (20.5 KB, 下载次数: 66)

未命名1.jpg

作者: 李东升    时间: 2012-7-22 19:05
  1. public static void main(String[] args) {
  2.                 for(int i=0;i<10;i++){
  3.                         if(i%2==0){
  4.                                 continue;
  5.                         }
  6.                         System.out.println(i);
  7.                 }
  8.                 System.out.println("OVER");
  9.         }
复制代码
看输出了什么。
  1. 1
  2. 3
  3. 5
  4. 7
  5. 9
  6. OVER
复制代码
continue是用于跳出本次循环,在for循环中,碰到continue关键字后,直接跳转到本次循环结束,也就是马上执行for循环括号内的条件变化语句,++或者--语句,然后判断条件语句,再决定循环与否。continue后直接写代码,是访问不到的,报错说检测到无法访问的代码,一般我是用条件语句来调用continue。
作者: 王红霞    时间: 2012-7-22 19:54
本帖最后由 王红霞 于 2012-7-22 19:56 编辑

class  Continue
{
public static void main(String[] args)
{
  for(int x=0;x<3;x++) //设置外层循环

  {System.out.println("x="+x);//x=0时  y进行for循环,当y的for循环结束之后才能继续外层的for循环。你说的continue它是跳出本次循环即:在for(int y=0;y<4;y++) {
     System.out.println("y1="+y);中循环 不执行本层for语句代码块中continue以下的代码语句。    当y循环了4次以后 就对x进行继续循环。x=2时,会再次对y的for语句循环一次,会把y的所有值再全部输出一次,依此继续之后的代码,所以会出现你编码后的结果。
   

    for(int y=0;y<4;y++)//设置内层循环
   {
     System.out.println("y1="+y);//打印y的值,为了与continue语句之后的y的值区分,用y1接收
    continue;
   
      // System.out.println("y2="+y);//打印在遇到continue之后,y的值变化,并用y2接收
   
   }
}
}
}
===============================================
class  Continue
{
public static void main(String[] args)
{
  for(int x=0;x<3;x++) //设置外层循环
  {
       System.out.println("x="+x);
    for(int y=0;y<4;y++)//设置内层循环
   {
     System.out.println("y1="+y);//打印y的值,为了与continue语句之后的y的值区分,用y1接收
    continue;//continue就是跳出本次循环 ,本层FOR语句continue一下的代码都不会再执行了。

   
      System.out.println("y2="+y);//打印在遇到continue之后,y的值变化,并用y2接收
   
   }
  
  }
}
}  
作者: 梁志仲    时间: 2012-7-23 00:18
楼主的理解是以为continue语句执行后,本层for语句就不再执行了,即跳出的是本层for语句,而去执行外循环的下一次循环。而continue语句的作用是在当次内循环中停止执行内循环中continue语句之后的语句,而执行内循环的下一次循环。
作者: 姬仁贵    时间: 2012-7-23 07:01
class  Continue
{
        public static void main(String[] args)
        {
         for(int x=0;x<3;x++) //设置外层循环
         {
             System.out.println("x="+x);
                 for(int y=0;y<4;y++)//设置内层循环,内循环次数4次。
                {
                        System.out.println("y1="+y);//打印y的值,为了与continue语句之后的y的值区分,用y1接收
                        continue;//跳过本次循环体尚未执行的语句,立即开始下一次循环。
   
                         System.out.println("y2="+y);//因为此条语句在内循 continue 之后,所以运行 continue 之后会跳过此语句直接执行内循环的y++语句。   
                }
  
         }
        }
}

首先要明确continue和break的用法: continue 不是跳出,而是跳过本次循环体尚未执行的语句,立即开始下一次循环
                                                          continue 是作用于其所在的那层循环,而不是分支语句
                                                                 
                                                          break 是单独语句,执行该语句,表示跳出该语句所在for循环体或switch语句体。
                                                          执行for语句体的break语句,中断本级for循环,执行更上一级循环的下一次循环。
                                                               
                                                                 
                                                         楼主你要区分 break 与 continue 的用法与区别那样就不会混乱了
作者: 李菁    时间: 2012-7-23 10:36
class  Continue
{
public static void main(String[] args)
{
  for(int x=0;x<3;x++) //设置外层循环
System.out.println("x="+x);
  {
   
    for(int y=0;y<4;y++)//设置内层循环
   {
     System.out.println("y1="+y);//打印y的值,为了与continue语句之后的y的值区分,用y1接收
    continue;
   
      // System.out.println("y2="+y);//打印在遇到continue之后,y的值变化,并用y2接收    你这句话写在continue语句后面,永远访问不到,所以报错是无法访问的语句
   
   }
  
  }
}
}
要弄清,continue是结束本次循环进入下一次循环。continue下面的语句执行不到




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