我试图在方法中声明实例数组的数组大小。有什么办法吗?谢谢。
package javaapplication2;
public class JavaApplication2 {
static int size;
static int x[] = new int[size];
public static void main(String[] args) {
setSize(5);
for (int i = 0; i < 5; i++) {
x[i] = i;
}
}
static void setSize(int i) {
size = i;
}
}
这是更新后的代码。我得到一个数组越界错误。我假设因为大小没有被宣布,即使是这样:
package javaapplication2;
public class JavaApplication2 {
static int x[];
public static void main(String[] args) {
setSize(5);
for (int i = 0; i < 5; i++) {
x[i] = i;
}
}
static void setSize(int i) {
x = new int[i];
}
}
我收到此错误。线程&#34; main&#34;中的例外情况java.lang.ArrayIndexOutOfBoundsException:0 在javaapplication2.JavaApplication2.main(JavaApplication2.java:13) Java结果:1
答案 0 :(得分:3)
全局变量在任何构造函数或main
方法之前初始化为,因此在初始化数组时默认将size
声明为0。
将size
设置为5不会有助于更改已初始化的数组。
答案 1 :(得分:1)
也在setSize()
方法中初始化数组,并从声明位置删除初始化器。
static int size;
static int[] x;
static void setSize(int i) {
size = i;
x = new int[i];
}
答案 2 :(得分:1)
执行代码时,它的运行方式如下:
static int size
声明变量size
并将其值设置为0
,这是int
的默认值。static int x[] = new int[size]
时size
的值为0.因此x[]
初始化为大小为0
的数组。这一切都发生在调用main()
之前。size
值更改为5
时,它对x
数组的大小没有影响,因为它已经初始化了。在这种情况下,您有两种选择:
size
设为5:static int size = 5
,或
仅在致电x[]
后初始化setSize()
:
static int size;
static int x[];
public static void main(String[] args) {
setSize(5);
x = new int[size];
...
}