黑马程序员技术交流社区

标题: 请教break与continue的一点问题。 [打印本页]

作者: 黑黑黑马    时间: 2014-3-14 10:08
标题: 请教break与continue的一点问题。
本帖最后由 黑黑黑马 于 2014-3-14 17:52 编辑

int k=1;
                int counts=0;
                while(k<=100)
                {
                  if(k==30)
                        {
                      //break;
                          continue;
                        }
                        
                        counts++;
                        k++;
                }
                System.out.println(counts);
用break可以,为什么用continue就不行了?
作者: 房建斌    时间: 2014-3-14 10:24
你用break直接跳出了循环,去打印这个counts的值了,用了continue的话,直接开始进行下一次循环了,也就是当k==30的时候呢,continue了,while循环判断k<=100,然后又是k==30,continue,然后就死循环了。
作者: 菜小徐    时间: 2014-3-14 10:33
break是结束整个循环体,continue是结束单次循环
看了这二个例子,或许你就懂了
使用break
while(x++ < 10)
{
    if(x == 3)
    {
        break;
    }
    printf("%d\r\n", x);
}
结果是输出  1 2   就退出了整个while循环

但是如果使用continue
while(x++ < 10)
{
    if(x == 3)
    {
        continue;
    }
    printf("%d\r\n", x);
}
结果是:1 2 4 5 6 7 8 9 10  可见他仅仅是不输出3,因为他结束了本次循环
作者: 文江江    时间: 2014-3-14 11:04
在一具循环体中,如果用break返回, 则不管其后面是否有满足for中条件的情况,都不做for中的循环体,即不会做;
如果用continue返回,如果条件满足执行continue, 跳出下面语句的执行,而返回到for 语句的开头,再次判断for中的条件,从而根据条件执行其中的循环体内容.
  1. 简单地说,比如这样一个程序:
  2. for(...) {
  3. ...
  4. continue/break;
  5. ...
  6. }
  7. System.out.prinln("a");
复制代码

continue表示立即去执行“for(...)”这行代码,break表示立即去执行“System.out.prinln("a");”这行代码。
  1. public class BreakTest {
  2.     public static void main(String args[]) {
  3.         System.out.println("循环没有开始");

  4.         System.out.println("现在开始测试continue");
  5.         for (int i = 0; i < 3; i++) {
  6.             System.out.println("开始第" + i + "次for循环");
  7.             if (i == 1) {
  8.                 continue;
  9.             }
  10.             System.out.println("看看continue后这里执行了吗?");
  11.         }
  12.         System.out.println("continue测试完毕\n***********************");

  13.         System.out.println("现在开始测试break");
  14.         for (int i = 0; i < 3; i++) {
  15.             System.out.println("开始第" + i + "次for循环");
  16.             if (i == 1){
  17.                 break;
  18.             }

  19.             System.out.println("看看break后这里执行了吗?");
  20.         }
  21.         System.out.println("break测试完毕\n***********************");
  22.     }
  23. }
复制代码

作者: daoyua    时间: 2014-3-14 16:26
break是中断当前正在运行的循环,而continue是马上开始下一次循环,你的++写到上面判断就不会是死循环了
作者: 黑黑黑马    时间: 2014-3-14 16:55
房建斌 发表于 2014-3-14 10:24
你用break直接跳出了循环,去打印这个counts的值了,用了continue的话,直接开始进行下一次循环了,也就是 ...

不好意思,没看懂,continue之后应该是不执行30这一次了,跳出后k++不是31,然后不能继续执行吗?
作者: 房建斌    时间: 2014-3-14 17:00
黑黑黑马 发表于 2014-3-14 16:55
不好意思,没看懂,continue之后应该是不执行30这一次了,跳出后k++不是31,然后不能继续执行吗? ...

当k==30,并不是跳出循环了,而是继续下一次循环,所以cotinue后面的代码不会执行的,
  1.         public static void main(String[] args) {
  2.                 int k=1;
  3.         int counts=0;
  4.         while(k<=100)
  5.         {
  6.           if(k==30)
  7.                {
  8.                           System.out.println(counts++);//把counts放到这里
  9.                   continue; //当k==30执行到这句,后面的语句就不执行了,直接到了while(k<=100),k一直等于30.不会往下走了。死循环。
  10.                 }
  11.                
  12.                 counts++;
  13.                 k++;
  14.         }
  15.         System.out.println(counts);
  16.                
  17.         }
复制代码

作者: daoyua    时间: 2014-3-14 17:02
continue不会执行循环下面的语句了,会重新开始下一次循环,但是你的k还是30,还会进入判断,还会contine,死循环了




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