黑马程序员技术交流社区
标题:
关于while循环中变量自增自减的一点疑惑
[打印本页]
作者:
潘星
时间:
2012-8-8 11:56
标题:
关于while循环中变量自增自减的一点疑惑
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,都是偶数,不太理解
求高手指点一下。
}
}
作者:
周瑞
时间:
2012-8-8 12:12
如果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)。
作者:
谭培龙
时间:
2012-8-8 12:23
class Pan
{
public static void main(String[] args)
{
int x=10;
while ((x--)>0)//这里是x--先运算再赋值10 9 8....1循环10次
{
if(x%2==0)//这里判断如果是偶数为true
continue; //如果为偶数就continue 表示停止本次循环 进行下一次循环,所以不打印偶数
System.out.println("x="+x); //为奇数时打印
}
int y=10;
while (y>0)//循环10次
{
if((y--)%2==0)//这里是y--先运算再赋值, 用伪代码来体现就是if(y%2==0 y=y-1) 这里如果为奇数就返回false同时自减一次。 比如 9%2==0返回false并自减,所以打印8,以此类推
continue; //如果上面是偶数 则为true并自减一次。
System.out.println("y="+y); // 所以打印偶数
}
}
}
复制代码
作者:
马振兴
时间:
2012-8-8 12:35
class test
{
public static void main(String[] args)
{
int x=10;
while ((x--)>0) //假设进入循环第一轮 此时 (x--) =9
{
if(x%2==0) //此时x=10
continue;
System.out.println("x="+x); //x经--运算得9
}
int y=10;
while (y>0) //假设进入第二轮 y=9
{
if((y--)%2==0) //(9--)%2=0
continue;
System.out.println("y="+y); //此时y经--运算,故y=8
}
}
}
复制代码
其实很好理解
只要理解 x=x++ 和 x=++x的区别就可以了。
x++是先赋值后运算
++x是先运算后赋值
作者:
程有愿
时间:
2012-8-8 22:29
这样吧 ,我借助楼上的这个图来给你讲解一下这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在执行完那句语句后会自减才是关键,自己慢慢体会就知道了!
作者:
焦晨光
时间:
2012-8-8 22:40
这是一个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
自加和自减都是在执行到或执行完后立即进行的 立即!
把我的解释代入你上面的程序
一切浮云都是神马~~~
@_@
作者:
潘星
时间:
2012-8-9 03:07
明白了,谢谢大家!
作者:
刘悦
时间:
2012-8-9 08:02
我在这里以X=10带入循环为例说明:
int x=10;
while ((x--)>0)//这里以因为是x--,会先用x=10进行运算,x=10>0,TRUE,然后X执行自减运算,进入循环,此时X=9
{
if(x%2==0)//9%2=1,不符合条件
continue;
System.out.println("x="+x);//输出9
}
int y=10;
while (y>0)
{
if((y--)%2==0)//先用Y=10进行运算,10%2=0,符合条件,y再执行自减运算,最后continue结束本次循环。此时Y=9。第二次循环,y=9运算,9%2=1.不符合IF条件,然后执行自减运算,此时y=8
continue;
System.out.println("y="+y); //输出y=8
}
复制代码
其实楼上的所有人说的很清楚了,这就是自增自减运算中,运算符位置问题带来的一些小的问题,楼主多注意就好,大家加油!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2