更改数组大小

时间:2015-02-12 01:17:25

标签: java arrays class

我正在尝试制作它,以便您可以使用方法更改数组的大小。

private String[] options;

public static void initOptions(int num)
{
    options = [4]; // this doesn't obviously work
}

我可以制作一个新变量

private String[] options;

public static void initOptions(int num)
{
    String[] options = new String[num];
}

但是后来我无法与班上的其他成员分享数组。

3 个答案:

答案 0 :(得分:1)

首先,您在options字段和initOptions字段的静态不匹配之间也存在不匹配。通常你希望它们是一样的。也就是说,你想要

private String[] options;

public void initOptions(int num)
{
    options = new String[num];
}

private static String[] options;

public static void initOptions(int num)
{
    options = new String[num];
}

第一种情况下,每个类的实例都有一个options数组,第二种情况下,所有类的实例共享一个options数组。

但是,这并没有真正改变数组的大小。 一旦设置了数组大小,它就无法改变。它的作用是创建一个所需大小的新数组,并将其分配给您的领域。

选项的旧值将被垃圾收集(如果没有其他东西正在使用它),并且它的旧值都不会出现在新的options实例中。如果要保留所有旧选项,则需要将它们复制到新数组中。保留原始选项字段的任何内容都不会看到更改(因为它们将保留旧数组,而不是新创建的版本)

private String[] options;

public void initOptions(int num)
{
    String newOptions = new String[num];
    for(int i=0; i<Math.min(num, options.length); ++i ) {
      newOptions[i] = options[i];
    }
    options = newOptions;
}

有一些帮助工具可以让你在核心Arrays包中进行一些复制 - 但是最好先了解一下发生了什么。

如果您希望选项字段的其他持有者看到更改,您可以使用ArrayList<String>来保存选项,因为它支持长度更改而无需新创建的对象。

答案 1 :(得分:0)

您正在使用实例变量optionsstatic方法,并且无法将它们混合(您将以编译器错误结束),如果您对此没有实际限制,请选择要将options变量设为静态或将initOptions更改为non-static,那么您的代码将非常简单:

private static String[] options;

public static void initOptions(int num) {
       options = new String[num];
}

答案 2 :(得分:-1)

如果您希望为您的字段选项分配方法返回的选项值,您可以编写

public void initOptions(int num){
    String[] options=new String[num];
    this.options=options;
}

然后从main调用字段f.e将调用数组。