我正在尝试制作它,以便您可以使用方法更改数组的大小。
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];
}
但是后来我无法与班上的其他成员分享数组。
答案 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)
您正在使用实例变量options
和static
方法,并且无法将它们混合(您将以编译器错误结束),如果您对此没有实际限制,请选择要将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将调用数组。