这个Java程序有什么问题?

时间:2013-10-13 10:48:58

标签: java arrays

class Main {
    public static void main(String[] args) {
        int x = 3;
        int [] a = new int [x];
        x+=5;
        System.out.println((x+=5));
        System.out.println(a.length);
    }
}

为什么不影响数组“a”的长度?我做错了什么?

问题是我被要求使用循环将数组长度加5。我甚至无法直接增加长度。这看起来像一个简单的问题,但我仍在学习过程中。我昨天做了,但我不记得怎么做。

5 个答案:

答案 0 :(得分:6)

您只是更改x的值,您还必须重新分配此值以更改数组长度。

        int x = 3;
        int[] a = new int[x];
        x += 5;
        a = new int[x];
        System.out.println(a.length);

答案 1 :(得分:1)

仅仅改变x的价值无济于事,

您需要在数组

中显式指定修改后的值

答案 2 :(得分:1)

您不能直接增加数组的大小。稍后您将了解ArrayList。您可以将数组变量重新分配给新数组;长度不是数组类型的一部分。所以,让我们把它分解为几步。

  1. 创建一个大小为3的数组。
  2. 向用户报告旧阵列的内容。
  3. 将长度存储在变量中。
  4. 5添加到该变量。
  5. 使用新长度创建一个新数组。
  6. 使用for循环将旧数组的元素复制到新数组中的相应位置,但System.arrayCopy更短。
  7. 将新数组分配给旧数组变量。
  8. 向用户报告已更改的旧阵列的内容。
  9. 查看ListArrayList文档,以便了解人们在实践中如何做到这一点。
  10. 当您进行此类练习时,请务必先将其分解为单个步骤。编程时,将方法分解为只做一件事的单个方法。

答案 3 :(得分:1)

好的,我总结一下给你一个更完整的答案:

首先,在初始化数组时,为其分配一个已定义/有限的内存块。 如果要在Java中更改此类数组的长度,则需要初始化一个新数组。 Java中没有回溯自动重新初始化数组。其他语言可能会为您做类似的事情,但Java不会。

其次,您通过值传递数组初始化中的x,这意味着,创建数组的功能会接收值1而不是内存地址。 Java中的方法也是这样做的:您将值作为参数传递给它们,但只要您没有在每个方法的本地环境中显式引用它们,它们就无法直接看到变量。这就是为什么没有接受参数的函数直接受到传递值的变量变化的影响。

第三,如果您经常尝试更改阵列的大小,则应考虑使用包含您正在寻找的功能的ArrayLists

第四,如果你想继续使用数组而不是其他东西并希望保留数组成员/值,你仍然需要将旧的数组内容传递给新的初始化数组。这可以通过循环遍历旧数组来实现。

答案 4 :(得分:0)

首先,你想要实现什么目标? 你的长度将等于数组创建期间的x值(代码的第二行), 如果你想使用动态数组,你应该考虑使用java.util.ArrayList