黑马程序员技术交流社区
标题:
有关i++问题
[打印本页]
作者:
朱志群
时间:
2013-7-23 18:02
标题:
有关i++问题
本帖最后由 尹桥印 于 2013-7-23 18:47 编辑
public class Er3_1 {
public static void main(String[] args)
{
int A = 15;
int i=0;
while(A<50)
{
A=A+5;
i=i++;
}
System.out.print(i);
}
}
复制代码
编译没错为什么算出来为0呢
作者:
HEIMA时光
时间:
2013-7-23 18:22
为什么不写成i=i+1呢?
作者:
HEIMA时光
时间:
2013-7-23 18:25
本帖最后由 HEIMA时光 于 2013-7-23 18:32 编辑
那个执行的打印语句没有放在while循环的内部,即便是经过几次循环,打印的i还是最初的值!
i=i++;表示的是i将0赋值给i,之后再自增一次。
如果是i=++i,就表示i先自增一次,让后将自增后的值赋值给i.
int a = 0;
b=a++;结果是 a=1,b=0;
b=++a;结果是 a=1,b=1;
作者:
刘张朋
时间:
2013-7-23 18:48
我觉得 i=i++; 的原理是,先将 i 的初始值赋值给 i ,然后将 i+1 的值进行缓存,所以每次i得到的始终是它的初始值,但是 i = ++i;不一样他是先将 i+1 ,然后再重新赋值给 i ,不是因为将输出语句写到while语句外面了,不信你可以将 i=i++; 直接写成 i++; 或者 i=++i;试一下
作者:
Angel♥儱唲
时间:
2013-7-23 18:52
我觉得你这里应该是在验证i++和++i的区别对吧,不过你还是用变量i来接收的数据就错在这里了,i=++i的时候是正确的,换成i=i++就错误了。如果你重新定义一个变量来接收这个值就不会存在这个问题了。或者级直接写i++和++1就好啊。
这里的问题我自己认为是i这个变量的先自增和后自增产生的,i=++i的时候,i先自增然后赋值给i,i的数据是变化的自增的,结果正确。但当i=i++的时候,第一步就是i先把0赋值给了i,然后i在自增,就在这里我觉得第二步的i自增没有意义了,因为你已经把0给了i,这个i就是下一次循环时的那个自增的i了,这就导致每一次都i把0赋值给i,这是我自己理解的啊,前辈们千万别喷我,刚刚学习菜鸟一个哈,说实话我自己都觉得晕
作者:
xscn
时间:
2013-7-23 18:58
HEIMA时光 发表于 2013-7-23 18:25
那个执行的打印语句没有放在while循环的内部,即便是经过几次循环,打印的i还是最初的值!
i=i++;表示的是 ...
不是没参与循环的。
public class Er3_1 {
public static void main(String[] args){
int A = 15;
int i=0;
while(A<50)
{
A=A+5;
i=i++;
//i++;都试一下就发现区别了
}
System.out.print(i);
}
}
复制代码
Java在执行 (变量=i++)的时候;在执行变量赋值语句之前,会先把i的值找个地方保存起来,然后直接在i变量的空间内对值+1,然后再把刚才保存起来的那个值赋给变量。
作者:
Joesph
时间:
2013-7-23 19:00
i=i++和i=++i
不一样的,i=i++,是右边i先赋值给左边i,然后右边i自增;i=++i,是右边i先自增,然后赋值给左边i.
你把i=i++改为 i=++i ,或 i++ 或 i+=1 或 i=i+1 都可以的。
作者:
yinjiek
时间:
2013-7-23 19:14
02.public static void main(String[] args)
03.{
04.int A = 15;
05.int i=0;
06.while(A<50)
07.{
08.A=A+5;
09.i=i++;
10.}
i=i++;
System.out.print(i);
结果为0是因为++在循环完之后进入第二次循环再++的,所以打印出来还是0;如果++在前面结果就是1了!
作者:
小时晚er
时间:
2013-7-26 15:36
i=i++,是先进行赋值在自身加1,++i是先加一后再进行赋值,所以,如果在循环内你写的是i=i++,那么它怎么循环结果都是0,
作者:
Mr_Free
时间:
2013-7-27 20:46
a=a++ ;这里面的过程是右边a的值先赋值给左边的a,然后再运算a+1;但是你 a只做了a+1的运算,并没有赋值给a。进入下一次循环的时候a又是0;
作者:
狼牙
时间:
2013-7-29 09:59
i=i++;表示的是i将0赋值给i,之后再自增一次。
把代码改成这样应该就可以啦!
public class TryTest {
/**
* @param args
*/
public static void main(String[] args)
{
int a=15;
int i=0;
while(a<50)
{
a=a+5;
i=i++;
}
System.out.println(i);
}
}
复制代码
我想这个才是你想要的结果吧?共同学习!共同进步!
作者:
小罴孩
时间:
2013-7-29 11:26
i=i++;这句意思是先把 等号后面的 i(此时为0) 值赋值给等号前面的 i ,等号后面的 i 在自增,因为在每次循环后等号前面的 i 都为0,所有结果输出为0.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2