How to calculate average of all numbers of array in Java

In the last article, I teach you how to calculate the sum of all numbers in a given array and in this article, we'll go one more step. This time, you need to write a program to calculate the average of all numbers from a given array, for example, you will be passed salaries of Java developers in different states in the USA and you need to calculate the average salary of Java developer in the USA. The example of average salaries of Java developer is more interesting because everybody wants to know how much Java developers make, isn't it? Anyway, coming back to the requirement of the program, The array will contain integers, which can be both positive and negative, so you must handle them. Your program should also be robust e.g. it should not break if you pass empty array or null. In these case either you can throw IllegalArgumentException  as returning any other number will be ambiguous.

For example, if you return zero then it could also be a possible average, so I won't suggest you return default values like zero or Integer.MIN_VALUE etc. Instead, throwing IllegalArgumentException and printing the input array would be a clear indication that a wrong input has been passed to this method.

Similar to the previous exercise this is also a simple one if you know how to get numbers from an array, how to get the length of an array, and how to iterate over an array in Java, as shown here. Actually, there are many ways to loop over an array in Java e.g. you can use the classical for loop, or while loop, or enhanced for loop from Java 1.5.

The easiest way is by using enhanced for loop because you don't need to keep track of array indices, so there are fewer chances of error. It also looks clean on code and much more readable than classical for loop.


In order to calculate the average of all numbers, you first need to calculate the sum of all elements, which you can do by following our last example. Once you have the sum just divide it by the total number of elements in the array, which is nothing but the length of the array. The result is the average of all number in given array.



Java Program to calculate an average of all numbers in an array

Here is our complete Java program to find the average of all integers in given array. Similar to the previous example, I have used Scanner to take input from the user, as shown here. Since it's not possible to directly input an array from the command prompt, you have to take individual elements and create an array from it as shown here. Once you got the required integer array, just pass it to the average(int[] input) method, it returns a float value, which is the average of all numbers in given array.

In this method, we first calculate the sum of all elements and the divide the total sum by the length of the array to get the average. There is a trick here, if you declare sum as int variable then your average will not be always accurate because it will become an integer division and result of integer division will always be an integer and not a floating point value.  Just remember to declare the sum as float variable to avoid that logical mistake. See a good book on core Java e.g. Big Java: Early Objects 5th Edition by Cay S. Horstmann to learn more about integer and floating point division in Java.

How to calculate average of array in Java


import java.util.Scanner;

/*
 * Java Program to calculate average of numbers in array
 * input : [1, 2, 3, 4, 5]
 * output: 3.0
 */

public class ArrayAverageProblem {

  public static void main(String[] args) {

  System.out
  .println("Welcome to Java Prorgram to calculate average of numbers");
  System.out.println("Please enter length of the array?");

  Scanner scnr = new Scanner(System.in);
  int length = scnr.nextInt();
  int[] input = new int[length];

  System.out.println("Please enter numbers ");

  for (int i = 0; i < length; i++) {
  input[i] = scnr.nextInt();
  }

  float average = average(input);

  System.out.println("Average of all numbers in array is " + average);
  scnr.close();
  }

  /**
  * Java method to calculate average of all numbers of array
  * 
  * @param input
  * @return average of all numbers in array
  */
  public static float average(int[] input) {
  float sum = 0f;
  for (int number : input) {
  sum = sum + number;
  }
  return sum / input.length;
  }

}

Output
Welcome to Java Program to calculate average of numbers
Please enter the length of the array?
5
Please enter numbers
1
2
3
4
5
Average of all numbers in array is 3.0

You can see here average is correctly calculated as 3.0 because total sum is 15 and total number of elements is 5, but if you change the sum as int sum = 0; instead of float sum = 0f; and enter following values you will get incorrect answer e.g.

Please enter the length of the array?
2
Please enter numbers
4
5
Average of all numbers in array is 4.0

This happens because 9/2 becomes an integer division and result of integer division is always an integer value, so 4.5 is cast into int and it becomes 4. When you declare sum as float value then it becomes a floating point calculation and the denominator will be promoted to float before division hence you will get the correct average which would be 4.5. Please see Java: A Beginner's Guide by Herbert Schildt to learn more about integer and floating point calculation in Java. 

How to calculate average of all numbers in array?


That's all about how to calculate the average of all numbers of an array. This program might seem very simple to you if you know how to calculate average but it teaches you a very important concept in Java i.e. difference between integer and floating point calculation. I have seen many programmers even experienced one make that difference by declaring the sum as int variable and testing with one set of values for which the method return correct average.

This also teaches you another lesson on Unit testing e.g. never believe your method is working correctly by testing with one set of values, you should always test with multiple values e.g. positive and negative values, boundary condition, null, zero, and empty array. You can consider writing those unit test as a task for you. If you don't know how to write Junit test cases in Java then please refer to JUnit in Action or Test Driven, a TDD and acceptance TDD guide for Java developers.  Any time invested in learning to write a unit test and actually writing those tests are worth of their money.


Other Java Programing exercises for Beginners
  • How to reverse an array in place in Java? (solution)
  • How to remove duplicate elements from the array in Java? (solution)
  • How to implement binary search in Java? (solution)
  • How to check if a String contains duplicate characters in Java? (solution)
  • How to print Fibonacci series in Java (solution)
  • How to check if given String is palindrome or not in Java? (solution)
  • How to reverse a String in place in Java? (solution)
  • How to find all permutations of a given String in Java? (solution)
  • How to find the highest occurring word from a given file in Java? (solution)
  • How to check if two given Strings are Anagram in Java? (solution)
  • How to implement Linear Search in Java? (solution)
  • How to find if given Integer is Palindrome in Java? (solution)
  • How to count vowels and consonants in given String in Java? (solution)
  • How to check if two rectangles intersect with each other in Java? (solution)
  • How to remove duplicate characters from String in Java? (solution)
  • How to check if a year is a leap year in Java? (solution)
  • How to reverse words in a given String in Java? (solution)
  • How to calculate Area of Triangle in Java? (program)
  • How to check if given number is prime in Java (solution)
  • How to calculate the square root of a given number in Java? (solution)


Further Reading
If you truly want to become a great Java developer then you can refer following two books to build your knowledge on Data structure and Algorithms


No comments:

Post a Comment