Often the data a program uses comes from a two-dimensional situation. For example, maps are two-dimensional (or more), the layout of a printed page is two-dimensional, a computer-generated image, such as on your computer's display, is two-dimensional, and so on.
For these situations, a Java programmer can use a two-dimensional array. This allows for the creation of table-like data structures with a row and column format. The first subscript is a row index in a table while the second subscript is a column index in a table. Here is example code:
int[][] table = new int[3][4];
int row, col;
for (row = 0; row < 3; row++){
for (col = 0; col < 4; col++){
table[row][col] = row + col;
}
}
The table below shows the value at each position within the array generated by the code above.
Col 0 | Col 1 | Col 2 | Col 3 | |
---|---|---|---|---|
Row 0 | 0 | 1 | 2 | 3 |
Row 1 | 1 | 2 | 3 | 4 |
Row 2 | 2 | 3 | 4 | 5 |
Two-dimensional arrays are objects. A variable such as table is a reference to a 2D array object. The declaration shown below defines a table that holds a reference to a 2D array of integers. Without any further initialization, table holds the value null because it hasn't been initialized. It was only declared.
int[][] table;
The code below instantiates a 2D array of integers, each of which is initialized to zero by default.
int[][]table = new int[3][4];
2D arrays can be hardcoded as shown below:
int[][]table = { {0,1,2,3},
{1,2,3,4},
{2,3,4,5} };
If no initializer is provided for an array, then when the array is created, it is automatically filled with the appropriate values: zero for numbers, false for boolean, and null for objects.
Just as with one-dimensional arrays, the row and column numbering of a 2-D array begins at subscript zero (0). The 3 rows of the array shown above are numbered from 0 to 2. Likewise, the 4 columns of the table are numbered from 0 to 3.
To access a location in a 2D array, specify the row coordinate first, then the column:
table[row][col]
The length of a 2D array is the number of rows it has. The row index will run from 0 to length -1. The number of rows in table is given by the value table.length.
Each row of a 2D array has its own length. To get the number of columns in table, use any of the following:
table[0].length
table[1].length
table[2].length.
There is actually no rule that says that all the rows of an array must have the same length, and some advanced applications of arrays use varying-sized rows. But if you use the new operator to create an array in the manner described above, you'll always get an array with equal-sized rows.
The code at the top of this page that hardcoded the loop boundaries. A better approach should work for an array of any dimensions.
int[][] table = new int[3][4];
int row, col;
for (row = 0; row < table.length; row++){
for (col = 0; col < table[row].length; col++){
table[row][col] = row + col;
}
}
In the sample above, the limits of the for loops have been redefined using table.length and table[row].length so that they work with any two-dimensional array of ints with any number of rows and columns .
Last modified: February 05, 2023