【问题标题】:unexpected increment result in java arrayjava数组中的意外增量结果
【发布时间】:2013-05-24 23:19:09
【问题描述】:

在学习如何在java中声明、初始化和访问数组元素时,我编写了这个简单的代码:

class ArrayAccess{

    public static void main(String args[]){
        int[] a;
        a = new int[4];
        a[0] = 23;
        a[1] = a[0]*2;
        a[2] = a[0]++;
        a[3]++;
        int i = 0;
        while(i < a.length){
            System.out.println(a[i]);
            i++;

        }
    }
}

但我得到了意想不到的输出。

我得到的输出是:

24     

46

23

1

所以,

为什么24而不是23作为a[0]的值?如果这是a[0]a[2] 处的适当增量,那么为什么a[1] 的元素是46 而不是48

为什么23而不是24作为a[2]的值?

【问题讨论】:

    标签: java arrays increment


    【解决方案1】:

    a[2] = a[0]++; 将值复制到 a[2] 后增加 a[0]

    同理:

    a[2] = a[0];
    a[0]+=1;
    

    如果您想在分配之前增加值,请使用a[2] = ++(a[0]);

    这与:

    a[0]+=1;
    a[2] = a[0];
    

    【讨论】:

      【解决方案2】:
      a[2] = a[0]++; 
      

        int temp = a[0];
        a[2] = a[0];
        a[0] = temp + 1;
      

      【讨论】:

        【解决方案3】:

        因为下面一行:

        a[2] = a[0]++;
        

        递增 (++) 具有递增右侧值的副作用。否则你应该使用:

        a[2] = a[0]+1;
        

        另一个例子是 ++number 的类似概念。如果你写了:

        a[2] = ++a[0];
        

        a[0] 将增加,然后添加到 a[2]。因此,在 a[2] 中,您将拥有:24

        【讨论】:

          【解决方案4】:

          需要对你的程序进行小修改

          类数组访问{

          public static void main(String args[]){
             int referenceNumber= 23;
              int[] a;
              a = new int[4];
              a[0] = referenceNumber;
              a[1] = a[0]*2;
              a[2] = referenceNumber++;
              a[3]++;
              int i = 0;
              while(i < a.length){
                  System.out.println(a[i]);
                  i++;
          
              }
          }
          

          }

          现在让我们来提问

          为什么 a[0] 的值是 24 而不是 23?如果这是在 a[2] 处增加 a[0],那么为什么 a[1] 的元素是 46 而不是 48。

          是的,这是由于在 a[2] 处增加了 a[0]。但关键是你的时刻 正在做 a[1] = a[0]*2;它还没有增加。

          为什么 a[2] 的值是 23 而不是 24?

          你正在做 a[2] = a[0]++;发生的事情是 a[0] 的第一个值是 分配给 a[2] ,然后最终在 a[0] 处的值增加而不是 在 [2]

          【讨论】:

            猜你喜欢
            • 2021-09-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-13
            • 1970-01-01
            相关资源
            最近更新 更多