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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潘星 中级黑马   /  2012-8-8 11:56  /  4901 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Pan
{
        public static void main(String[] args)
        {
                int x=10;
                while ((x--)>0)
                {
                        if(x%2==0)
                                continue;                       
                        System.out.println("x="+x);                       
                }
                int        y=10;
                while (y>0)
                {
                        if((y--)%2==0)
                                continue;                       
                        System.out.println("y="+y);                       
                }
                上面2个while循环第一个的结果是x=9,7,5,3,1,都是奇数,
                        为什么第二个循环的结果是y=8,6,4,2,0,都是偶数,不太理解
                        求高手指点一下。
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

7 个回复

倒序浏览
  如果y=9,if((y--)%2==0)不满足条件,执行System.out.println("y="+y),而此时y已经自减了1变为8了,所以输出为8;而x在进入while循环后就已经自减了1,如果x=10,那么进入循环后变为9,  if(x%2==0)不满足条件, 执行System.out.println("x="+x)。
回复 使用道具 举报

  1. class Pan
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x=10;
  6.                 while ((x--)>0)//这里是x--先运算再赋值10 9 8....1循环10次
  7.                 {
  8.                         if(x%2==0)//这里判断如果是偶数为true
  9.                                 continue;    //如果为偶数就continue 表示停止本次循环 进行下一次循环,所以不打印偶数        
  10.                         System.out.println("x="+x);   //为奇数时打印                     
  11.                 }
  12.                 int        y=10;
  13.                 while (y>0)//循环10次
  14.                 {
  15.                         if((y--)%2==0)//这里是y--先运算再赋值, 用伪代码来体现就是if(y%2==0 y=y-1)  这里如果为奇数就返回false同时自减一次。 比如 9%2==0返回false并自减,所以打印8,以此类推
  16.                                 continue;  //如果上面是偶数 则为true并自减一次。
  17.                         System.out.println("y="+y);    //   所以打印偶数                 
  18.                 }

  19.         }
  20. }
复制代码
回复 使用道具 举报
  1. class test
  2. {
  3.          public static void main(String[] args)
  4.          {
  5.                  int x=10;
  6.                  while ((x--)>0)   //假设进入循环第一轮  此时  (x--) =9
  7.                  {
  8.                          if(x%2==0)     //此时x=10
  9.                                  continue;                        
  10.                         System.out.println("x="+x);      //x经--运算得9                  
  11.                 }
  12.                  int        y=10;  
  13.                  while (y>0)         //假设进入第二轮  y=9
  14.                  {
  15.                          if((y--)%2==0)     //(9--)%2=0
  16.                                  continue;                  
  17.                                                       
  18.                         System.out.println("y="+y);     //此时y经--运算,故y=8               
  19.                 }
  20.                  }
  21. }
复制代码
其实很好理解
只要理解 x=x++ 和 x=++x的区别就可以了。
x++是先赋值后运算
++x是先运算后赋值

回复 使用道具 举报
这样吧 ,我借助楼上的这个图来给你讲解一下这2部分程序是怎么运行的,,首先要明白 x--是先运算后-1:x%2是取余数的意思
一:x部分:首先程序运行到6时,此时的x=10;再执行while的{}里面的部分时x都是作为10来执行的,到了第8句则为true,所以就执行第9句,程序就会跳出进行下次循环了,第二轮循环中的x=9了,在执行到第八句就为false,就会跳到第18句,就会打印9了,该次循环结束后,x就会减一,那么第三轮循环就变成8了,如此类推,打印就为,9,7,5,3,1.
二:y部分:第一轮循环 y=10,第13句为true,执行到15句时也是y=10来执行的,那么结果页为true,所以就会执行16句,跳出循环,在这里要注意的是当程序执行完第15句y就会自减一次变为9,所以进入下次循环时,y=9;满足条件后执行到第15句则为false,执行完这句之后y又会自减一次变为8,接下来就会执行第18句,这时输出y就为8了,如此类推,打印出8,6,4,2,0
其实这个里面重点是要准确的判断x和y在执行完那句语句后会自减才是关键,自己慢慢体会就知道了!
回复 使用道具 举报
这是一个java非常基础的问题
你可以这样理解:
a--(a++) 后面暗藏了一个 a=a-1(a=a+1) 执行完带有a--运算的语句后 a自减1
--a(++a) 前面暗藏了一个 a=a-1(a=a+1) 执行到带有--a运算的语句后 a先自减1 再运算
总之:
++(--) 在前面 先自加或自减1 再运算
++(--) 在后面 先运算 在自加或自减1
自加和自减都是在执行到或执行完后立即进行的 立即!

把我的解释代入你上面的程序
一切浮云都是神马~~~
@_@
回复 使用道具 举报
明白了,谢谢大家!
回复 使用道具 举报
我在这里以X=10带入循环为例说明:
  1. int x=10;
  2.                  while ((x--)>0)//这里以因为是x--,会先用x=10进行运算,x=10>0,TRUE,然后X执行自减运算,进入循环,此时X=9
  3.                  {
  4.                          if(x%2==0)//9%2=1,不符合条件
  5.                                  continue;                        
  6.                         System.out.println("x="+x);//输出9                        
  7.                 }
  8.                  int        y=10;
  9.                  while (y>0)
  10.                  {
  11.                          if((y--)%2==0)//先用Y=10进行运算,10%2=0,符合条件,y再执行自减运算,最后continue结束本次循环。此时Y=9。第二次循环,y=9运算,9%2=1.不符合IF条件,然后执行自减运算,此时y=8
  12.                                  continue;                        
  13.                         System.out.println("y="+y);                        //输出y=8
  14.                 }
复制代码
其实楼上的所有人说的很清楚了,这就是自增自减运算中,运算符位置问题带来的一些小的问题,楼主多注意就好,大家加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马