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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吕猛 黑马帝   /  2011-12-7 21:09  /  2295 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 京泰 于 2011-12-9 22:21 编辑

大家好,小弟刚刚学java,请多指教。有一个问题和大家探讨一下。
记得课程中,毕老师说一下两个表达式是相等的。如下图所示。


今天写总结的时候突然想起来。

我这个程序并不能被下面的两个程序代替!是我的写法有问题,还是什么啊?
原程序


代替程序1

代替程序2

7 个回复

倒序浏览
本帖最后由 武超 于 2011-12-7 22:05 编辑

首先你要了解for循环的具体执行过程,例如你的这个for(int x=0;x<=10;x++)具体的执行过程是先先声明定义一个x=0;然后判断x值是否<=10;符合则执行代码块中的程序,执行完代码块中的程序后,再执行x++,此时x=1,执行判断语句x<=10;继续执行代码块中程序,执行完代码块中的程序后,再执行x++,此时x=2,再继续按照刚才的步骤执行。
下面说一下continue:continue是跳出本次循环,继续进行下次循环,也就是说执行continue时,不在执行continue后的代码,而是去执行for()循环中的x++,然后执行判断语句x<=10,再继续循环。
你下面的两个代码错误的原因是:代替程序1中:x++放的位置错误了,应该是代码块执行完才执行的x++;代替代码2中:continue跳出循环时没有执行x++,死循环。如果你把代码改成这样就可以了:
class  T
{
        public static void main(String[] args)
        {
                for(int x=0;x<=10;)
                {
                        if(x%2==1)
                        {x++;
                        continue;
                        }
                        System.out.println("x="+x);
                        x++;
                }
        }
}

评分

参与人数 1黑马币 +10 收起 理由
吕猛 + 10

查看全部评分

回复 使用道具 举报
本帖最后由 杨银川 于 2011-12-7 22:07 编辑

表面上看是一样,但要看你的循环里的语句怎么写了,
先说代替程序1:开始x的默认值是0,然后在for循环里执行x++,如果是奇数就跳过,如果是偶数就输出,结果是2,4,6,8,10,怎么没有0呢,是因为进入for循环先执行x++,0变成了1,所以是从1开始的,同样由于最后取到的是10,再加1后,成了11,不满足循环条件。
再说替代程序2:这个一开始,由于x的默认值是0,所以0被执行,输出,然后经过x++,变为1,由于if语句,知道1不执行,跳出循环,注意,x++也一起跳出,不执行,所以结果为0。
说的有些啰嗦,但希望对你有帮助。

哦,对了,看这个就是要弄懂for循环谁先执行的问题,这里毕老师讲的很明白,你多看几遍就会有新的理解。
回复 使用道具 举报
本帖最后由 benbenqi 于 2011-12-7 23:36 编辑

楼主你x++放的位置不对
源程序for(int x=0 ; x<=10;x++)是先执行for{}里面的然后再去执行x++,所以你的代替1代码中要把x++放到for循环内部中所以含有x语句的后面。那样在第一次执行是保证了x=0这一次的循环
然而原程序因为if语句后面跟着continue语句,当if是真跳出本次循环
所以应该这样写

public static void main (String[] args)
{   
  int x = 0;
for(;x<=10;)
  {
   if(x%2==1)
   {
     x++;
   continue;
  }
  System.out.println("x="+x);
   x++;
}
}
sorry,因为手机回复所以代码有点不规范。。

评分

参与人数 1黑马币 +10 收起 理由
吕猛 + 10

查看全部评分

回复 使用道具 举报
本帖最后由 程传鹏 于 2011-12-9 17:08 编辑

你的代替程序1之所以会出错是因为:
      你在循环之前把x=0;
       但在for循环体里,先进行的运算是x++;
        跟原程序比,初时运算时,原程序x=0;
        而你的代替程序x为1,
而你的代替程序2中:
    x++在continue之后,当x取值到1时,
            程序执行到continue而不往下执行,
            所以x++没有被执行,所以没有效果,
            程序停在了x=1的死循环里,所以出错
回复 使用道具 举报
第一个程序,结果会少一个0,因为判断之前x=1了,第二个程序用
if(x%2==1)
   {
     x++;
   continue;
  }
替代就好了,否则会死循环。
回复 使用道具 举报
刘博 黑马帝 2011-12-9 10:05:11
7#
我觉得你最应该明白x++和continue是什么意思,x++是先用一次x在加1,continue是跳过一次继续进行.这样你就会明白怎么写了.希望可以帮助到你,我也是刚学java中
回复 使用道具 举报
方书堂 黑马帝 2011-12-9 13:12:35
8#
上面 的几位都说的很详细了,你只要清楚for循环语句的执行顺序和continue的含义就很清楚的可以看出两个代替程序问题。
continue 是指跳出这次循环继续下一次循环。当continue执行时,下面的语句是不会被执行的.
for(int x=0;x<=10;x++)
{
循环体
}
你可以看到首先是x初始化--》判断条件---》执行循环体———》执行x++————》判断条件(成立)————》执行循环体。
要是不满足条件就结束。
这样可以看出初始化满足条件就一定会执行一次而且只执行一次,你就可以看到代替程序1初始化值没有执行循环体,代替程序2中当x为奇数时,就会直接continue ,下面的X++不会执行,你就会变成一个死循环。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马