1
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 添加到数组的长度。我什至不能直接增加长度。这看起来像一个简单的问题,但我仍在学习过程中。我昨天做了,但我不记得怎么做了。

4

5 回答 5

6

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

        int x = 3;
        int[] a = new int[x];
        x += 5;
        a = new int[x];
        System.out.println(a.length);
于 2013-10-13T10:54:50.380 回答
1

仅仅改变 x 的值并没有帮助,

您需要在数组中显式分配修改后的值

于 2013-10-13T10:57:32.623 回答
1

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

  1. 创建一个大小为 3 的数组。
  2. 向用户报告旧数组的内容。
  3. 将长度存储在变量中。
  4. 添加5到该变量。
  5. 创建一个具有新长度的新数组。
  6. 使用循环将旧数组的元素复制到新数组中的相应位置for,尽管System.arrayCopy更短。
  7. 将新数组分配给旧数组变量。
  8. 向用户报告更改的旧数组的内容。
  9. 查阅文档ListArrayList了解人们在实践中是如何做到这一点的。

当你做这样的练习时,总是先把它分解成单独的步骤。当你编程时,把你的方法分解成只做一件事的单独的方法。

于 2013-10-13T11:11:12.260 回答
1

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

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

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

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

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

于 2013-10-13T11:17:42.553 回答
0

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

于 2013-10-13T10:58:05.153 回答