Multidimensional Arrays
Tags: java, programming, learning, beginners
Published: 2024-05-29 13:52:24

Data in a table or a matrix can be represented using a two-dimensional array. You can use a two-dimensional array to store a matrix or a table. For example, the following table that lists the distances between cities can be stored using a two-dimensional array named **distances**.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h0wedvobvussbbjg6e9a.png)

`double[][] distances = {
 {0, 983, 787, 714, 1375, 967, 1087},
 {983, 0, 214, 1102, 1763, 1723, 1842},
 {787, 214, 0, 888, 1549, 1548, 1627},
 {714, 1102, 888, 0, 661, 781, 810},
 {1375, 1763, 1549, 661, 0, 1426, 1187},
 {967, 1723, 1548, 781, 1426, 0, 239},
 {1087, 1842, 1627, 810, 1187, 239, 0},
 };`

An element in a two-dimensional array is accessed through a row and column index. How do you declare a variable for two-dimensional arrays? How do you create a two-dimensional array? How do you access elements in a two-dimensional array? This section addresses these issues.

##  Declaring Variables of Two-Dimensional Arrays and Creating
Two-Dimensional Arrays

The syntax for declaring a two-dimensional array is:

`elementType[][] arrayRefVar;`

or

`elementType arrayRefVar[][]; // Allowed, but not preferred`

As an example, here is how you would declare a two-dimensional array variable **matrix** of **int** values:

`int[][] matrix;`

or

`int matrix[][]; // This style is allowed, but not preferred`

You can create a two-dimensional array of 5-by-5 **int** values and assign it to **matrix** using this syntax:

`matrix = new int[5][5];`

Two subscripts are used in a two-dimensional array, one for the row and the other for the column. As in a one-dimensional array, the index for each subscript is of the **int** type and starts from **0**, as shown below (a).

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5rxn1jlstt1mwglvk5cp.png)

To assign the value **7** to a specific element at row **2** and column **1**, as shown above (b), you can use the following syntax:

`matrix[2][1] = 7;`

It is a common mistake to use **matrix[2, 1]** to access the element at row **2** and column **1**. In Java, each subscript must be enclosed in a pair of square brackets.

You can also use an array initializer to declare, create, and initialize a two-dimensional array. For example, the following code below in (a) creates an array with the specified initial values, as shown above (c). This is equivalent to the code below in (b).

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/slhkycb7lp2gp894070a.png)

## Obtaining the Lengths of Two-Dimensional Arrays

A two-dimensional array is actually an array in which each element is a one-dimensional array. The length of an array **x** is the number of elements in the array, which can be obtained using **x.length. x[0], x[1]**, . . . , and **x[x.length-1]** are arrays. Their lengths can be obtained using **x[0].length, x[1].length**, . . . , and **x[x.length-1].length**. For example, suppose **x = new int[3][4]**, **x[0]**, **x[1]**, and **x[2]** are one-dimensional arrays and each contains four elements, as shown below. **x.length** is **3**, and **x[0].length, x[1].length**, and **x[2].length** are **4**.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/92bdqoxeo7ue2uhph9u4.png)

## Ragged Arrays

Each row in a two-dimensional array is itself an array. Thus, the rows can have different lengths. An array of this kind is known as a _ragged array_. Here is an example of creating a ragged array:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rilkfzez3eh7dnh4ogut.png)

As you can see, **triangleArray[0].length** is 5, **triangleArray[1].length** is 4, **triangleArray[2].length** is 3, **triangleArray[3].length** is 2, and **triangleArray[4].length** is 1.

If you don’t know the values in a ragged array in advance, but do know the sizes—say, the same as before—you can create a ragged array using the following syntax:

`int[][] triangleArray = new int[5][];
triangleArray[0] = new int[5];
triangleArray[1] = new int[4];
triangleArray[2] = new int[3];
triangleArray[3] = new int[2];
triangleArray[4] = new int[1];`

You can now assign values to the array. For example,

`triangleArray[0][3] = 50;
triangleArray[4][0] = 45;`

The syntax **new int[5][]** for creating an array requires the first index to be specified. The syntax **new int[][]** would be wrong.