黑马程序员技术交流社区
标题:
想不明白的代码
[打印本页]
作者:
张文兵
时间:
2012-6-10 02:14
标题:
想不明白的代码
public class Part {
public static void main(String[] args) {
int j = 0;
for (int i = 0; i < 100; i++) {
j = j++;
}
System.out.println(j);
}
}[/code]输出为0。。。。实在想不透了,求解
作者:
江南
时间:
2012-6-10 02:33
有这样子写代码的吗?你是想把j自增在赋给j吧!j++就可以啦! j++为1,j=0; 每次都没有改变j的值啊!只是改变了j++的值但没有赋给j j和j++ 是2个对象 进入循环 j=j++执行先赋值 j=0;然后自增 j++ 为1 之前已经赋值给0了不会执行2次赋值吧有点类似于像j=j=j++这个编译过不了的所以这个1 没有赋给j!而是给了j++这么一个对象 你在怎么循环 j都是0 j++自增而已
假如有这个int sum=0来接收 第一次是将j赋给sum,第二次是j++赋给了j
j=j++;////第一次循环 j=0; j++为1并没有赋给j而是j++内部的一个临时对象,一个等号同一个对象不可能执行2次赋值吧!;此时j=0,第二次循环j还是先执行赋值j还是为0 j++为2
sum=j++;//第一次循环 sum=0;j++为1;此时j=1;第二次循环 sum=1;j++等于2将其赋给了j
作者:
邵阳
时间:
2012-6-10 07:18
class Part
{
public static void main(String[] args)
{
int j = 0;
for (int i = 0; i < 100; i++)
{
j = j++;
// 楼
主只要将这的j=j++改成++j,这样得的运算结果就是100。这个是因为 :自增(后)j=j++是首先计算j=j,也就当 于j=j,因为 int j=0,所以不论循环多少j都是0.
自增(前)j=++j,相当于j=j+1,所以运算结果是100.
}
System.out.println(j);
}
} //[/code]输出为0。。。。实在想不透了,求解
为了让你更明白我说说自增(前)和自增(后)的例子:
自增(前) a=2;b=++ a —————— a=3;b=3
自增(后) a=2;b=a++ ——————— a=3;b=2
作者:
cro
时间:
2012-6-10 08:28
//你引用的j值永远是0,应该定义一个变量保存j值
public class TestTalk2 {
public static void main(String[] args) {
int sum = 0;
int j = 0;
for (int i = 0; i < 100; i++) {
sum = j++;
}
System.out.println(sum);
}
}
作者:
田建
时间:
2012-6-10 09:18
这个,建议lz将循环的规则再看看!
作者:
姚玉鹏
时间:
2012-6-10 09:22
j++不会赋值成功... 改成++j j就等于100了...
作者:
武剑峰
时间:
2012-6-10 09:35
j = j++;
这个代码太绕,j运算之后新增,可是在这里已经有赋值运算,j=j了,所以你的j++,没有赋值成功。建议楼主分开两行
j=j;//这行注释掉也行
j++;
作者:
逝去的记忆ヽ
时间:
2012-6-10 09:56
首先你要明白: j++,和++j 的区别。
你这段程序中: j = j ++ 这个是先执行赋值动作,也就是说吧右边的j=0 赋值给左边的J, 所以j 还是等于0, 无论循环多少次结果都是0
那么你要是把j++改成++j,那么,就是等号右边的j先自加,然后再进行赋值动作,那么结果就是100了。
其实你这个程序有点矛盾。 你只要把程序循环当中的j=j++改成 j++ 那么程序就没有问题了。
希望对你有帮助。
作者:
kevindavid
时间:
2012-6-10 10:35
未命名.jpg
(20.91 KB, 下载次数: 12)
下载附件
2012-6-10 10:23 上传
简单的来说这就是一个前++和后++的优先问题
他们都是执行了++操作的但是后a=++a和a=a++的值是不同因为他们两个的优先级不一样++a
是先执行++操作再赋值而且a++是先执行赋值操作再++所以说他们都执行了的。
所以说这里在楼主满足i小于100的条件的时候j也进行了++操作但是赋值。
建议楼主将j++改成++j 这里好像也是唯一的一个方法让他执行+1动作了吧。因为我试了一下(j++)这样也是不会被赋值的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2