## Two Dimensional Arrays

The most common kind of multidimensional array is a two-dimensional array. If you think of a one-dimensional array as a column of values you can think of a two-dimensional array as a table of values like so:

c0 | c1 | c2 | c3 | |

r0 | 0 | 1 | 2 | 3 |

r1 | 1 | 2 | 3 | 4 |

r2 | 2 | 3 | 4 | 5 |

r3 | 3 | 4 | 5 | 6 |

r4 | 4 | 5 | 6 | 7 |

Here we have an array with five rows and four columns. It has twenty total elements. However we say it has dimension five by four, not dimension twenty. This array is not the same as a four by five array like this one:

c0 | c1 | c2 | c3 | c4 | |

r0 | 0 | 1 | 2 | 3 | 4 |

r1 | 1 | 2 | 3 | 4 | 5 |

r2 | 2 | 3 | 4 | 5 | 6 |

r3 | 3 | 4 | 5 | 6 | 7 |

We need to use two numbers to identify a position in a two-dimensional array. These are the element’s row and column positions. For instance if the above array is called J then J[0][0] is 0, J[0][1] is 1, J[0][2] is 2, J[0][3] is 3, J[1][0] is 1, and so on.

Here’s how the elements in a four by five array called M are referred to:

M[0][0] | M[0][1] | M[0][2] | M[0][3] | M[0][4] |

M[1][0] | M[1][1] | M[1][2] | M[1][3] | M[1][4] |

M[2][0] | M[2][1] | M[2][2] | M[2][3] | M[2][4] |

M[3][0] | M[3][1] | M[3][2] | M[3][3] | M[3][4] |

##### Declaring, Allocating and Initializing Two Dimensional Arrays

Two dimensional arrays are declared, allocated and initialized much like one dimensional arrays. However we have to specify two dimensions rather than one, and we typically use two nested `for`

loops to fill the array.

The array examples above are filled with the sum of their row and column indices. Here’s some code that would create and fill such an array:

```
class FillArray {
public static void main (String args[]) {
int[][] M;
M = new int[4][5];
for (int row=0; row < 4; row++) {
for (int col=0; col < 5; col++) {
M[row][col] = row+col;
}
}
}
}
```

Of course the algorithm you would use to fill the array depends completely on the use to which the array is to be put. Here is a program which calculates the identity matrix for a given dimension. The identity matrix of dimension N is a square matrix which contains ones along the diagonal and zeros in all other positions.

```
class IDMatrix {
public static void main (String args[]) {
double[][] ID;
ID = new double[4][4];
for (int row=0; row < 4; row++) {
for (int col=0; col < 4; col++) {
if (row != col) {
ID[row][col]=0.0;
}
else {
ID[row][col] = 1.0;
}
}
}
}
}
```

In two-dimensional arrays ArrayIndexOutOfBounds errors occur whenever you exceed the maximum column index or row index. Unlike two-dimensional C arrays, two-dimensional Java arrays are not just one-dimensional arrays indexed in a funny way.

###### Exercises

- Write a program to generate the HTML for the above tables.