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).