黑马程序员技术交流社区
标题: 一个循环问题 谁给讲解一下 [打印本页]
作者: 74123 时间: 2012-7-6 12:41
标题: 一个循环问题 谁给讲解一下
public class Test
{
public static void main(String args[])
{
int i=13,j=10;
if(i-->j)
i++;
else j--;
System.out.println(i+"\t"+j);
}
}
为啥是13和10。。。。
作者: 王健 时间: 2012-7-6 12:43
是if-else语句问题,根据判断条件可知,变量i和j做比较,得到条件表达式的值为真,然后执行i-1,然后变量i的值为12,而j的值为10;由于条件表达式为真,所以执行i++,所以i的值为13,并跳过else子句块,循环控制语句执行完毕,这时变量i和j的值分别为13和10。楼主基础需要加强。
作者: 孔令金 时间: 2012-7-6 12:56
public class Test
{
public static void main(String args[])
{
int i=13,j=10;
if(i-->j)//这里计算后i=12,j=10,条件为true
i++;//这计算后i=13,而j=10未变化
else
j--;//这里未执行
System.out.println(i+"\t"+j);//输出时,i=13,j=10
}
}
作者: 姬仁贵 时间: 2012-7-6 12:56
本帖最后由 姬仁贵 于 2012-7-6 13:01 编辑
首先这个不属于循环的问题 这个是选择判断语句if-else语句;
int i =13, j =10;
if(i-->j)
i++;
else j--;
System.out.println(i+"\t"+j);
首先进入 if 判断语句中 if(i-- >j)判断i--是否小于 j 因为 i-- 是先取值再自减的所以是13>10; i的值自减变为12;
判断语句成立所以执行 i++; else j--;这条语句不执行 ;
i 自增 变为13;
后面直接执行 System.out.println(i+"\t"+j);打印结果13 、 10
作者: 梁健生 时间: 2012-7-6 12:57
先告诉我怎么读你这个程序, --->是什么意思,然后我就能告诉你这个结果的原因!!!这个符号不认识……
作者: 杨朔 时间: 2012-7-6 12:59
这不是个循环问题啊
这是个选择语句
int i=13,j=10;
if(i-->j)//i--结果是13 但是i的值变成了12 此时条件为真执行i++不执行else语句
i++;//i++ 结果是 12 但是i的值变成了13
else j--;
这样打印出来的就是13 和10 了 (建议楼主去看看i++ 和++i的区别,还有什么是循环语句{:soso_e100:})
作者: 万宝东 时间: 2012-7-6 13:05
楼主 我帮你运行一下这个程序,希望可以帮到你
public class Test
{
public static void main(String args[])
{
int i=13,j=10; //第一步:找到main函数后,从这里开始执行,定义i=13,j=10
if(i-->j) //第二步 :先要明确i--这句话是什么意思。就是先用i的值运算,然后i-1.所以 if(i-->j)实际是(下面的话翻译成人能理解的语言哈)如果13大于10,然后13减1,此时i的值变为12.
i++; //第三步:由于第二步的结果为true,所以运行这句话 i加1,第二步中i的值已经是12了,所以此时执行完这句话后,i的值变为13.
else j--; //这句话 由于 if语句判断一直是true,所以这句话没有被执行。
System.out.println(i+"\t"+j);
}
}
所以结果 是 13 10
作者: 梁健生 时间: 2012-7-6 13:22
我晕,总算看明白了! 帮你解释一下,看清楚了~~~
public class Test
{
public static void main(String args[])
{
int i=13,j=10;
if(i-->j)//判断 i - - 是否 大于 j //首先对比 i 是否大于 j,结束后 i 值-1
i++; //因为条件成立,i 值在+1 //这样 i 值就又是 13了
else j--; //无意义语句,没有机会运行的
System.out.println(i+"\t"+j);
//所以结果 就是 原来的初始值!无意义
}
}
作者: 刘美丽 时间: 2012-7-6 13:45
public class Test
{
public static void main(String args[])
{
int i=13,j=10;
if(i-->j) //i--是先赋值给它13然后再减减,j的值为10,所以此处if判断条件是:i=13,j=10,i>j为真,如果此时让控制台输出i的值,则应该是12,因为赋完值后进行减减操作,i--的意思是i=i-1则为12
i++;// i++此时的值为13,如果i++改为System.out.print(i++)则应该是12,在输出一次,即将i++改为System.out.print(i++);System.out.print(i++)则输出12,13因为i++是先赋值再进行加加操作,
else j--;
System.out.println(i+"\t"+j);
}
}
作者: 张凯 时间: 2012-7-6 14:08
if(i-->j),这时 i 的值还是13,13>10,满足条件,因此执行i++,当执行i++之前,i 的值已经变为12,执行完i++后,i 的值变为13,因此最后输出 i 的值为13,又因为 j 的值自始至终未发生运算,所以 j 的值未发生改变,所以还是10,希望对你有所帮助。
作者: 谭培龙 时间: 2012-7-6 14:16
public class Test
{
public static void main(String args[])
{
int i=13,j=10;//这里给 i和j分别赋值为13和10
if(i-->j)//这句话表示i--先赋值再计算 也就是先赋值,再运算。所以判断if的条件13>10为ture,计算完后--也就是此时i=12
i++;//执行玩if为ture条件成立i自增一次,所以i的值为13.
else j--;//结果为ture不执行这个代码。
System.out.println(i+"\t"+j);//打印结果是13和10
}
}
作者: 汤密奕 时间: 2012-7-6 17:09
int x = i++;++放在变量i后面是先把i拿来用,即先赋值给x,再自增
int x = ++i;++放在变量i前面是先让i自增,再拿来用,赋值给x
作者: 朱东方 时间: 2012-7-7 03:05
这个题结果是13和10一点也不难看出来。
如果把i=13改成i=11就有意思了'
public class Test
{
public static void main(String args[])
{
int i=13,j=10;
if(i-->j) //事实上此处代码==>if(13>j) {i--;i++},结果为true,else下的语句不执行。
i++;
else j--;
System.out.println(i+"\t"+j);
}
}
---------------------------------------------------------
public class Test
{
public static void main(String args[])
{
int i=11,j=10;
if(i-->j) //注意:是11在和j比较大小,而不是10.
i++;
else j--;
System.out.println(i+"\t"+j); //结果为11,10
}
}
i++特点:
过程是这样:
1,先将i变量中的数据,进行临时存储。
temp = i;
2,i进行自增运算。
i = i+1;
3,将临时存储a的数据
temp和j比较大小。等价于if(temp>j)
作者: 孤独新生 时间: 2012-7-7 08:23
public class Test
{
public static void main(String args[])
{
int i=11,j=10;
if(i-->j) //注意:是11在和j比较大小,而不是10.
i++;
else j--;
System.out.println(i+"\t"+j); //结果为11,10
}
}
---------------------------------------------------------------------------
如果输出在变一下就 还有的玩了
public class Test
{
public static void main(String args[])
{
int i=11,j=10;
if(i-->j) //注意:是11在和j比较大小,而不是10.
i++;
else j--;
System.out.println((++i)+"\t"+(j--)); // 输出语句中如果还有计算那结果还是会发生改变的啊
System.out.println((++i));
System.out.println((++j));
// 如果你单独输出 无论你输出语句里面加不加括号答案都不会变了这个也要注意
}
}
作者: 范泰洋 时间: 2012-7-7 15:19
public class Test
{
public static void main(String args[])
{
int i=13,j=10;
if(i-->j)
i++;
else j--;
System.out.println(i+"\t"+j);
}
}
同学,你应该明白的是这道练习,不是关于循环语句的问题。而是if...else 语句和自增与自减的问题。
首先。你要搞明白自增中两个++号在前和在后的区别:
例如:int a = 3;b = 1;
b = ++a;//l两个++号在前面的运算过程相当于 先a = a+1 然后再把a+1的值重新赋值给了原来的a,这时原来的a发生了变化就变成了 a = 4 ;最后进行赋值把a的值赋值给b。b = 4.
b = a++ //两个++号在后面的运算过程:先将a变量中的数据,进行临时存储,temp =a 就是说临时存储的a数值还是3.然后再进行自增,那么a = a+1 a = 4;最后赋值给b的是临时存储的a = 3. 而不是自增后的值。
再看上面那道练习:
int i=13,j=10;
if(i-->j)//这里是i-- 那么就是i变量中的数据,进行临时存储,再自减。最后赋值的是临时存储的值。
i++;//这里i++没有进行赋值,那么最后打印输出的就是自增后的结果。
else j--;
System.out.println(i+"\t"+j);
还有要明确的是if ... else语句是如果...否则 意味着两个语句肯定有一个会执行。就例如if()这个大括号里面满足条件判断为true就执行i++不执行else下面的i--。.如果if()大括号里面不满足条件判断为false就不执行i++而是执行else下面的i--。
作者: 王宝康 时间: 2012-7-7 16:25
public class Test
{
public static void main(String args[])
{
int i=13,j=10; //此处为定义两个int类型变量i,j,并赋初值,i=13,j=10
if(i-->j) /*
* if语句,括号内的语句成立的时候执行i++,否则执行else里的j--。i--是先使用i的值,然后再减去1,括号内此时是13>10,为true,执行完括号内的i-->j后
* i 减去1为12,即i=12,j=10,括号内的语句为true,执行i++,即先试用i的值,然后把i的值加1,此处没有使用i的值,所以只是把i值加1,此时
* i =12+1=13,j一直没有改变*/
i++; //i++只有一句话可以不用大括号括起来,当if 块由多句组成时,要用大括号括起来
else j--;
System.out.println(i+"\t"+j); //执行完if语句后执行此处代码,此时i=13,j=10,所以会打印13和10
}
}
作者: 康子龙 时间: 2012-7-7 22:21
public class Test
{
public static void main(String args[])
{
int i=13,j=10;
if(i-->j)
i++;
else j--;
System.out.println(i+"\t"+j);
}
}
为啥是13和10。。。。
一步步来昂
首先你int i=13;int j=10;
然后做if判断时你用的if(i-->j)
这一步是这么执行的:
先判断是否i>j,然后不管i是否大于j都做i--运算,也就是i=i-1(此时i=12),因为结果大于,所以进入if语句里; //因为i--的意思是先执行操作然后做自减运算,如果你写的是--i的话就是先执行自减然后再做别的操作。
接下来,如我前面所说,你这步写的i++;但由于这一步只有这一个自加运算没别的操作,所以不用考虑,只能是i的自加,运算完毕后i=13。
注意,由于if条件满足就直接进了if的语句体,所以else里的j--没有执行所以j还是10。
再接下来你进行了输出,所以得到的就是13 10了。
提醒一下,if()语句里不管有多少句都最好加上花括号,这样不容易因为笔误出现bug。
最好写为:
if(i-->j)
{
i++;
}
else {
j--;
}
作者: 康子龙 时间: 2012-7-7 22:22
对了,忘了说了,你这个不是循环。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |