# Introduction

Data in a table or a matrix can be represented using a two dimensional array.

The preceding ___ introduces how to use one-dimensional arrays to store linear collections of elements. 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`.

The two dimensional array equivalent:

```double[][] distances = {
{0, 983, 787, 714, 1375, 967, 1087},
{983, 0, 214, 1102, 1763, 1723, 1842},
{787, 214, 0, 661, 781, 810},
{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},
};```

# Two Dimensional Array Basics

An element in a two dimensional array is accessed through a row and a column index.

How do you declare a variable for two dimensional arrays? How do you make a two dimensional array? How do you access elements in a two dimensional array? This section addresses these issues.

## Declaring Variables of and Making Two Dimensional Arrays

The syntax for declaring a two-dimensional array is:

`elementType[][] arrayRefVar;`

or

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

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

`int[][] matrix;`

or

`int matrix[][]; // Allowed, but not preferred style of syntax`

You can make 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 rows and another for the columns. As in a one dimensional array, the index for each subscript is of the `int` type and starts from `0`, as show below in table (a).

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

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

To make the a point clear: the 1st bracket [] is references the rows. The 2nd [] is references the columns.

*Note that a common mistake is 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, make, and initialize a two dimensional array. For example, the following code:

```int[][] array = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
{10, 11, 12},
};```

makes an array with specified initial values, as shown in table (c). This is code is equivalent to:

```int[][] array = new int[4][3];
array[0][0] = 1; array[0][1] = 2; array[0][2] = 3;
array[1][0] = 4; array[1][1] = 5; array[1][2] = 6;
array[2][0] = 7; array[2][1] = 8; array[2][2] = 9;
array[3][0] = 10; array[3][1] = 11; array[3][2] = 12;```

## 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`.

In other words, Number of Rows`x.length` and Number of Columns = `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. `x.length` is `3`, and `x[0].length`, `x[1].length`, and `x[2].length` are `4`. Here’s a diagram showing the lengths of a two dimensional array:

## 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 making a ragged array:

As you can see, `triangleArray[0].length` is 5, `traingleArray[1].length` is 4, `triangleArray[2]` is 3, `triangleArray[3]` is 2, and `triangleArray[4]` 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 make a ragged array using the following syntax:

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

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

*Note that the syntax `new int[5][]` for making an array requires the first index to be specified. So `new int[][]` would be wrong.

◄◄◄BACK | NEXT►►►