更改数组大小
Changing the array size
我正在努力做到这一点,以便您可以使用一种方法更改数组的大小。
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];
}
但那样我就无法与 class 的其他成员共享数组了。
首先,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];
}
第一种情况对于 class 的每个实例都有一个 options
数组,第二种情况有一个 class 的所有实例共享的 options
数组。
然而,这并没有真正改变数组的大小。
一旦设置了数组大小,它就无法更改。它所做的是创建一个所需大小的新数组并将其分配给您的字段。
选项的旧值将被垃圾收集(如果没有其他东西正在使用它)并且其旧值的 none 将在新的 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>
来保存您的选项,因为它支持长度更改而无需新创建的对象。
如果您希望为您的字段选项分配选项值您的方法returns您可以写
public void initOptions(int num){
String[] options=new String[num];
this.options=options;
}
然后从 main 调用字段 f.e 将调用数组。
您正在使用一个实例变量 options
和一个 static
方法,并且不可能将它们混合使用(您将以编译器错误结束),如果您对此没有真正的限制,选择将 options
变量设为静态或将 initOptions
更改为 non-static
,因此您的代码将非常简单:
private static String[] options;
public static void initOptions(int num) {
options = new String[num];
}
我正在努力做到这一点,以便您可以使用一种方法更改数组的大小。
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];
}
但那样我就无法与 class 的其他成员共享数组了。
首先,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];
}
第一种情况对于 class 的每个实例都有一个 options
数组,第二种情况有一个 class 的所有实例共享的 options
数组。
然而,这并没有真正改变数组的大小。 一旦设置了数组大小,它就无法更改。它所做的是创建一个所需大小的新数组并将其分配给您的字段。
选项的旧值将被垃圾收集(如果没有其他东西正在使用它)并且其旧值的 none 将在新的 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>
来保存您的选项,因为它支持长度更改而无需新创建的对象。
如果您希望为您的字段选项分配选项值您的方法returns您可以写
public void initOptions(int num){
String[] options=new String[num];
this.options=options;
}
然后从 main 调用字段 f.e 将调用数组。
您正在使用一个实例变量 options
和一个 static
方法,并且不可能将它们混合使用(您将以编译器错误结束),如果您对此没有真正的限制,选择将 options
变量设为静态或将 initOptions
更改为 non-static
,因此您的代码将非常简单:
private static String[] options;
public static void initOptions(int num) {
options = new String[num];
}