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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张文兵 初级黑马   /  2012-6-10 02:14  /  1879 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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。。。。实在想不透了,求解

评分

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

查看全部评分

8 个回复

倒序浏览
有这样子写代码的吗?你是想把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

评分

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

查看全部评分

回复 使用道具 举报
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

评分

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

查看全部评分

回复 使用道具 举报
//你引用的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);
        }
}
回复 使用道具 举报
这个,建议lz将循环的规则再看看!
回复 使用道具 举报
j++不会赋值成功...  改成++j  j就等于100了...   
回复 使用道具 举报
j = j++;
这个代码太绕,j运算之后新增,可是在这里已经有赋值运算,j=j了,所以你的j++,没有赋值成功。建议楼主分开两行
j=j;//这行注释掉也行
j++;
回复 使用道具 举报
首先你要明白: j++,和++j  的区别。
你这段程序中: j = j ++  这个是先执行赋值动作,也就是说吧右边的j=0 赋值给左边的J, 所以j 还是等于0, 无论循环多少次结果都是0
那么你要是把j++改成++j,那么,就是等号右边的j先自加,然后再进行赋值动作,那么结果就是100了。
其实你这个程序有点矛盾。 你只要把程序循环当中的j=j++改成 j++ 那么程序就没有问题了。
希望对你有帮助。
回复 使用道具 举报

简单的来说这就是一个前++和后++的优先问题
他们都是执行了++操作的但是后a=++a和a=a++的值是不同因为他们两个的优先级不一样++a
是先执行++操作再赋值而且a++是先执行赋值操作再++所以说他们都执行了的。
所以说这里在楼主满足i小于100的条件的时候j也进行了++操作但是赋值。
建议楼主将j++改成++j  这里好像也是唯一的一个方法让他执行+1动作了吧。因为我试了一下(j++)这样也是不会被赋值的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马