The code int [4][5] indicates that there will be four arrays of ints in the array scores, with 5 ints in each array of ints.
While we visualize this arrangement by thinking of a
matrix of rows and columns, something slightly different is
occurring in the memory.

scores holds a reference to an array of 4 elements where
each element is a reference to an array of 5
integers.
It is easier to simply think of it
as a grid or matrix. 
At times, you may need to remember that
each row is actually an array. These "row" arrays can
be referred to as scores[0], scores[1],
scores[2], and scores[3] where each row is type int [ ].
Working with Matrices:
• Filling by list Just as working with a onedimensional array, it
is possible to fill a two dimensional array by using a list
at the time the array is declared. Notice the "sets"
of braces "within" the list denoting the "array of arrays".
int [ ] [ ]
scores = {
}; 
{ 20, 18, 22, 20, 16 },
{ 18, 20, 18, 21, 20 },
{ 16, 18, 16, 20, 24 },
{ 25, 24, 22, 24, 25 } 
Notice the punctuation in the
list. The "arrays" are separated by commas, as
are ordinary elements in a list. Be sure you
include the starting and ending (all inclusive)
braces. 
• Default
filling when declared  When an array is created it is automatically filled with a
zero (for numerical values), a false (for boolean values) or
null (for String values).
• Filling with user input When working with
twodimensional arrays (such as accessing, filling,
printing, etc.), it is necessary to use nested loops.
The outer loop controls the number of rows and the inner
loop controls the number of columns.
// Filling the matrix
import java.util.Scanner;
. . .
Scanner reply = new Scanner(System.in);
double [ ][ ] scores = new double [4] [5] ;
for ( row = 0; row < 4; row ++ )
{
for ( column = 0; column < 5; column + + )
{
System.out.println("Enter score " + column + " for contestant " + row +":'");
scores [ row ] [ column ] = reply.nextDouble();
}
}
• Manipulating a matrix  Suppose you want to save the information for 30
students and 3 exam grades for each student entered at the
keyboard. In addition, you want to find the average
(which could be a decimal value) for each
student, and then store this average in a fourth column of the same matrix.
Remember, you will need to obtain the grades before you can
compute the average. Here is one possibility:
import java.util.Scanner;
public class matrixtest
{
public static void main(String[] args)
{
Scanner reply = new Scanner(System.in);
//create memory
space for entire matrix
double [ ] [ ] grades = new double [ 30 ] [
4 ] ;
// Fill the matrix with user input and compute average
int row, column;
double sum, average, temp;
for ( row = 0; row < 3; row ++ )
{
sum = 0;
for(column = 0; column <
3; column++)
{
System.out.println("Enter grade "+(column+1)+" for contestant "+(row+1)+":'");
grades [ row ] [ column ] = reply.nextDouble();
sum =
sum + grades[row][column];
}
average = sum / 3;
grades[row][3] = average;
}
// Print
averages only
System.out.println("You saved the following
averages: ");
for( row = 0; row < 3; row ++ )
{
System.out.println("Student " + (row + 1) + ": " +
grades[row][3]);
}
}
}
• Length: Just as a command such as list.length returns the length of a one dimensional array, scores.length will return the number of rows in
this twodimensional
array. scores[ i ].length will return the number of columns of the row
with subscript i in a twodimensional array.
• Working with
Strings  Create a matrix of String
values, fill the matrix by list, and print the matrix.
Notice that the "internal" arrays are of differing sizes.
Notice how the .length is used to deal with these varying lengths during printing.
public class ArrayOfArraysAnimalDemo
{
public static void main(String[ ] args)
{
String[ ][ ]
animals = {
{ "DanaDog", "WallyDog", "JessieDog", "AlexisDog", "LuckyDog" },
{ "BibsCat", "DoodleCat", "MillieCat", "SimonCat" },
{ "ElyFish", "CloieFish", "GoldieFish", "OscarFish", "ZippyFish",
"TedFish"},
{"RascalMule","GeorgeMule","GracieMule","MontyMule","BuckMule","RosieMule"}
};
// printing matrix
for (int i = 0; i <
animals.length; i++)
{
System.out.print(animals[ i ] [ 0 ] + " ");
for (int j = 1; j < animals[ i ].length; j++)
{
System.out.print(animals[ i ][ j ] + " ");
}
System.out.println( );
}
}
}
