黑马程序员技术交流社区

标题: 关于for循环转换成while循环的问题 [打印本页]

作者: 欧阳文愿    时间: 2011-11-1 11:13
标题: 关于for循环转换成while循环的问题
本帖最后由 欧阳文愿 于 2011-11-23 16:04 编辑

昨天和今天一直在看那个控制语句,不好意思,小弟基础差,怕问出的问题让大家笑话,关于循环的问题,书上说循环语句的三种形式在表达上是等价的,也就是说任何一个循环都可以用这三种形式表示,while循环可以转换成for循环,for也能转换成while循环对吧,例如:
  1. int sum =0;
  2. int i =0       
  3. while (sum<1000)
  4. {
  5.         sum =sum+i;
  6.         i++;
  7.                 }
  8. System.out.println("sum="+sum);
复制代码
while循环转换成for循环:
  1. int sum =0;
  2.                 for (int i =0;sum<=1000 ;i++ )
  3.                 {
  4.                         sum += i;
  5.                 }
  6.                
  7.                 System.out.println("sum="+sum);
复制代码
再看for循环转换成while循环:               
{              int num=0;
                        for(int i=0;i<10;i++){
                        if(i%3==0)continue;
                        sum += i;                 }
                                 System.out.println("sum="+sum);


而for转换成while就出问题,为什么呢?
int sum=0;       
while (i<10)
                {
                        if(i%3==0)continue;
                        sum =sum+ i;
                        i++;
                }
System.out.println("sum="+sum);

作者: 宁超    时间: 2011-11-1 11:23
{:soso_e136:}没看懂你第三段代码
   int num=0;
的作用。
作者: olkldksl    时间: 2011-11-1 11:38
下面的说是for转换成while,怎么两个都是while
作者: 黄晓天    时间: 2011-11-1 11:46
本帖最后由 黄晓天 于 2011-11-1 11:50 编辑

哥们,你的这一句“if(i%3==0)continue”会造成一个死循环,你把这句去掉,程序就可以得到sum了。
你运行一下下面的代码,看是否是你想要的:

class SumDemo
{
        public static void main(String[] args)
        {
                int i=1;
                int sum=0;
                while (i<10)
        {              
                        sum+=i;
                        System.out.print("\tsum="+sum);
                        if(i%3==0)
                        {
                                System.out.println();
                          
                        }
                    i++;
                                 
                    
         
                         
        }
      

        }
}

作者: 李龙龙    时间: 2011-11-1 12:09
continue在循环语句中的作用,是结束当前循环,进入下次循环的判断,在上面的代码,下面的代码执行不到,所以 i 的值不被改变,会一直循环下去。
作者: 欧阳文愿    时间: 2011-11-1 12:16
不好意思,第三段代码复制错了,刚才,不知道是不是我这网络的问题,我再csdn写的日记发布不了,我点了一下返回,写了了一个上午,白忙了,郁闷
作者: 刘福双    时间: 2011-11-1 12:25
本帖最后由 刘福双 于 2011-11-1 12:32 编辑

int sum=0;        
int i=0;
while (i<9)//由于先i++,所以这里应该改成9。
                {
                        i++;
                        if(i%3==0)continue;
                        sum =sum+ i;
                }
System.out.println("sum="+sum);




只要把i++;放到上面就可以防止continue死循环造成程序错误。
找好逻辑先后顺序就很简单了。
作者: 黄晓天    时间: 2011-11-1 13:02
刘福双,要是不去掉continue,程序依然是死循环,当i=3的时候
作者: 黄晓天    时间: 2011-11-1 13:02
刘福双,要是不去掉continue,程序依然是死循环,当i=3的时候
作者: 刘福双    时间: 2011-11-1 13:11
本帖最后由 刘福双 于 2011-11-1 13:16 编辑

呵呵  你验证一下!while循环成立 i++;然后在判断continue(终止本次循环,继续下次循环),跳到while重新循环,而 "i" 的值变了!
作者: 黄晓天    时间: 2011-11-1 13:32
嗯,我调试了一下,确实是我错了,以后长交流哦!
作者: 黄晓天    时间: 2011-11-1 13:33
嗯,我调试了一下,确实是我错了,以后长交流哦!




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