Treating a 2D array as an array of 1D arrays

A 2D array in Java is an array of references to 1D arrays, each of which represents a row. See Intro to 2D arrays for additional discussion.

`getAverage` method

The `getAverage` method finds the average (mean) of the elements in a 1D array.

``````public static double getAverage(int[] vals)
{
int sum = 0;

for(int i = 0; i < vals.length; i++)
sum += vals[i];

return sum / (double) vals.length;
}
``````

`findHighestAverage` method

The `findHighestAverage` method accepts the 2D array `scores` as a parameter. Each row in `scores` contains the scores for 1 student. `findHighestAverage` returns the average of the highest scoring student. The method assumes that `scores` has at least 1 row.

See Finding the minimum or maximum for a discussion of the algorithm used to find the max.

``````public static double findHighestAverage(int[][] scores)
{
double highestAverage = getAverage(scores[0]);

for(int r = 1; r < scores.length; r++)
{
double average = getAverage(scores[r]);

if(average > highestAverage)
highestAverage = average;
}

return highestAverage;
}
``````

`scores[0]` stores a reference to the 1D array representing the first row in `scores`. The call `getAverage(scores[0])` passes the reference to the first row to `getAverage`. `getAverage` returns the average of the values in the first row.

`scores[r]` stores a reference to the row at index `r` in `scores`. The call `getAverage(scores[r])` works the same as the call `getAverage(scores[0])`.

`main` method

``````public static void main(String[] args)
{
int[] nums = new int[] {5, 6, 7};

System.out.println(getAverage(nums)); // 6.0

int[][] scores = new int[][] {
{90, 75, 80, 85},  // 82.5
{85, 90, 90, 90},  // 88.75
{90, 95, 95, 100}, // 95
{70, 70, 90, 60}   // 72.5
};

System.out.println(findHighestAverage(scores)); // 95.0
}
``````

The `getAverage` method accepts a 1D array as a parameter. From the perspective of `getAverage`, a row from a 2D array is the same as a 1D array that is not part of a 2D array.

The call `getAverage(nums)` passes a reference to the 1D array containing `[5, 6, 7]` to `getAverage`, which computes and returns the average (`6.0`).