A two-dimensional array consists of an array of one-dimensional arrays and a three-dimensional array consists of an array of two-dimensional arrays. Occasionally, you will need to represent n-dimensional data structures. In Java, you can create n-dimensional arrays for any integer n.

The way to declare two-dimensional array variables and create two-dimensional arrays can be generalized to declare n-dimensional array variables and create n-dimensional arrays for n >= 3. For example, you may use a three-dimensional array to store exam scores for a class of six students with five exams, and each exam has two parts (multiple-choice and essay). The following syntax declares a three-dimensional array variable **scores**, creates an array, and assigns its reference to **scores**.

`double[][][] scores = new double[6][5][2];`

You can also use the short-hand notation to create and initialize the array as follows:

`double[][][] scores = {`

{{7.5, 20.5}, {9.0, 22.5}, {15, 33.5}, {13, 21.5}, {15, 2.5}},

{{4.5, 21.5}, {9.0, 22.5}, {15, 34.5}, {12, 20.5}, {14, 9.5}},

{{6.5, 30.5}, {9.4, 10.5}, {11, 33.5}, {11, 23.5}, {10, 2.5}},

{{6.5, 23.5}, {9.4, 32.5}, {13, 34.5}, {11, 20.5}, {16, 7.5}},

{{8.5, 26.5}, {9.4, 52.5}, {13, 36.5}, {13, 24.5}, {16, 2.5}},

{{9.5, 20.5}, {9.4, 42.5}, {13, 31.5}, {12, 20.5}, {16, 6.5}}};

**scores[0][1][0]** refers to the multiple-choice score for the first student’s second exam, which is **9.0**. **scores[0][1][1]** refers to the essay score for the first student’s second exam, which is **22.5**. This is depicted in the following figure:

A multidimensional array is actually an array in which each element is another array. A three-dimensional array consists of an array of two-dimensional arrays. A two-dimensional array consists of an array of one-dimensional arrays. For example, suppose **x = new int[2][2][5]**, and **x[0]** and **x[1]** are two-dimensional arrays. **X[0][0]**, **x[0][1]**, **x[1][0]**, and **x[1][1]** are one-dimensional arrays and each contains five elements. **x.length** is **2**, **x[0].length** and **x[1].length** are **2**, and **X[0][0].length**, **x[0][1].length**, **x[1][0].length**, and **x[1][1].length** are **5**.

## Case Study: Daily Temperature and Humidity

Suppose a meteorology station records the temperature and humidity every hour of every day and stores the data for the past ten days in a text file named **Weather.txt**. Each line of the file consists of four numbers that indicate the day, hour, temperature, and humidity. The contents of the file may look like the one in (a).

Note that the lines in the file are not necessarily in increasing order of day and hour. For example, the file may appear as shown in (b).

Your task is to write a program that calculates the average daily temperature and humidity for the **10** days. You can use the input redirection to read the file and store the data in a three-dimensional array named **data**. The first index of **data** ranges from **0** to **9** and represents **10** days, the second index ranges from **0** to **23** and represents **24** hours, and the third index ranges from **0** to **1** and represents temperature and humidity, as depicted in the following figure:

Note that the days are numbered from **1** to **10** and the hours from **1** to **24** in the file. Because the array index starts from **0**, **data[0][0][0]** stores the temperature in day **1** at hour **1** and **data[9][23][1]** stores the humidity in day **10** at hour **24**. The program is given below:

`Day 0's average temperature is 77.7708`

Day 0's average humidity is 0.929583

Day 1's average temperature is 77.3125

Day 1's average humidity is 0.929583

. . .

Day 9's average temperature is 79.3542

Day 9's average humidity is 0.9125

You can use the following command to run the program:

`java Weather < Weather.txt`

A three-dimensional array for storing temperature and humidity is created in line 9. The loop in lines 13–20 reads the input to the array. You can enter the input from the keyboard, but doing so will be awkward. For convenience, we store the data in a file and use input redirection to read the data from the file. The loop in lines 25–28 adds all temperatures for each hour in a day to **dailyTemperatureTotal** and all humidity for each hour to **dailyHumidityTotal**. The average daily temperature and humidity are displayed in lines 31–32.

## Case Study: Guessing Birthdays

```
package demo;
import java.util.Scanner;
public class GuessBirthdayUsingArray {
public static void main(String[] args) {
int day = 0; // Day to be determined
int answer;
int[][][] dates = {
{
{ 1, 3, 5, 7},
{ 9, 11, 13, 15},
{17, 19, 21, 23},
{25, 27, 29, 31}
},
{
{ 2, 3, 6, 7},
{10, 11, 14, 15},
{18, 19, 22, 23},
{26, 27, 30, 31}
},
{
{ 4, 5, 6, 7},
{12, 13, 14, 15},
{20, 21, 22, 23},
{28, 29, 30, 31}
},
{
{ 8, 9, 10, 11},
{12, 13, 14, 15},
{24, 25, 26, 27},
{28, 29, 30, 31}
},
{
{16, 17, 18, 19},
{20, 21, 22, 23},
{24, 25, 26, 27},
{28, 29, 30, 31}
},
};
// Create a Scanner
Scanner input = new Scanner(System.in);
for(int i = 0; i < 5; i++) {
System.out.println("Is your birsthday in Set" + (i + 1) + "?");
for(int j = 0; j < 4; j++) {
for(int k = 0; k < 4; k++)
System.out.printf("%4d", dates[i][j][k]);
System.out.println();
}
System.out.print("\nEnter 0 for No and 1 for Yes: ");
answer = input.nextInt();
if(answer == 1)
day += dates[i][0][0];
}
System.out.println("Your birthday is " + day);
}
}
```

A three-dimensional array **dates** is created in Lines 10–41. This array stores five sets of numbers. Each set is a 4-by-4 two-dimensional array.

The loop starting from line 46 displays the numbers in each set and prompts the user to answer whether the birthday is in the set (lines 54–55). If the day is in the set, the first number (**dates[i][0][0]**) in the set is added to variable **day** (line 58).

## Top comments (0)