2013-06-23 85 views
1

2D阵列如果我声明的2D阵列,例如:初始化在JAVA

int[][] numbers = new int[5][]; 

我想你必须单独地声明/初始化各5为int []? 比如,以前我分配一个值数[0] [1],我不得不说:

​​

我写了一个小程序,并明确提出一个价值数[0] [1]运行它,它没有初始化数字[0]。 我完全不认为单个数组必须先在2d数组中初始化?

编辑:我的误解是在初始化。前两条语句没问题,因为我声明了goodArray中每个int []的长度为3,这会导致它们全部被初始化。而在badArray声明,我只是宣布有多少阵列有(3),所以我得到一个NPE:

int [][]goodArray = new int[3][3]; 
goodArray[0][1] = 2; 

int[][] badArray = new int[3][]; 
badArray[0][0] = 2; 
+1

这不应该工作,它会抛出一个NPE,当我尝试。你可以发布一个简短但完整的程序来证明这一点吗? –

+1

这样你可以做不同大小的数组,例如'numbers [0] = new int [5]'和'numbers [1] = new int [7]' – nachokk

回答

0

随着Java的多维数组,你可以指定一个位置,没有必要单独定义他们。

+0

我看到了。出于某种原因,我认为你必须在设置特定索引值之前声明数组。我知道你用一个数组做。 – user1154644

0

可以容易地测试使用类似下面的实施例中的二维阵列的行为:

int[][] numbers1 = new int[][] { {1, 2, 3}, {1, 2, 3, 4, 5}}; /* full initialization */ 
numbers1 = new int[3][]; /* [3][0] is null by default */ 
try { 
    System.out.println(numbers1[0][0]); 
} catch (NullPointerException e) { 
    System.out.println(e); 
} 
numbers1[0] = new int[3]; /* all three ints are initialized to zero by default */ 
System.out.println(numbers1[0][0]); 
numbers1[0] = new int[] {1, 2, 3}; 
System.out.println(numbers1[0][0]); 

将产生以下输出:

java.lang.NullPointerException 
0 
1 
0

INT [] []数=新INT [5] [];

随着已创建5 INT []一个维阵列上一行。现在您需要在使用它们之前说出每个一维数组的大小。 Java提供了这种灵活性,你可以在2D数组中使用可变大小的一维int []数组。