Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java: Declaring a multidimensional array without specifying the size of the array ( eg. new int[10][] )

I've been trying to figure out what exactly is happening here. I'm just trying to figure out what the 2 lines are doing that I've commented on below. I found this program that doesn't declare the full dimensions of the array (instead of new int[10][5]; it just decides to not declare it by saying 'new int[10][];' It's like the 2nd array length doesn't matter (changing it to 1 or 100 doesn't affect the output).

int[][] tri = new int[10][];  //this lack of giving the size of the 2nd array is strange
 for (int r=0; r<tri.length; r++) {
 tri[r] = new int[r+1];   //I'm not sure what this line is doing really 
}
for (int r=0; r<tri.length; r++) {
 for (int a=0; a<tri[r].length; a++) {
     System.out.print(tri[r][a]);  
     }
 System.out.println();
 }
like image 831
Tony DiNitto Avatar asked Mar 27 '12 20:03

Tony DiNitto


2 Answers

The first line makes an array of int arrays. There are 10 slots for int arrays created.

The third line creates a new int array and puts it in one of the slots you made at first. The new int array has r+1 spaces for ints in it.

So, the int array in position 0 will have 1 slot for an int. The int array in position 1 will have 2 slots for an int. The overall shape will be:

[
    [0],
    [0,0],
    [0,0,0],
    ...,
    [0,0,0,0,0,0,0,0,0,0]
]

which is hinted at with the variable name tri (it looks like a triangle)

like image 65
Riley Lark Avatar answered Oct 11 '22 07:10

Riley Lark


All new int[10][] is declaring is an array of size 10, containing null arrays.

In the for loop, the null arrays are being instantiated into ever increasing array sizes.

like image 22
Sheriff Avatar answered Oct 11 '22 05:10

Sheriff