Find frequency of digits in a number in java
This problem is pretty common in interviews and computer examinations. Candidate is required to write a program where a user enters any random integer and the program should display the digits and their count in the number.
For Example, if the entered number is 74526429492, then frequency of 7 is 1, 4 is 3, 5 is 1, 6 is 1, 2 is 3, 9 is 2.
In tabular format,

 Number Frequency 7 1 4 3 5 1 6 1 2 3 9 2

There can be many ways to program the above problem. This article will explain two ways to find frequency of each digit in a number with explanation and output

Method 1 : Using array
Initialize an array of size 10 whose each location represents a digit from 0 to 9. Value at a location of the array is the count(or frequency of occurrence) of that digit.That is, a value of 2 at index 5 means that 5 occurs 2 times in the number.

Extract the digits of the number by taking modulus of the number by 10. Increment the count at location corresponding to the digit extracted.
Thus, if the digit is 2, then increment the value at 2nd position of the array, if the digit is 8, then increment the value at 8th position of the array and so on.

Continue this till all the digits of the array have been covered.

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the number");
int number = scanner.nextInt();
// initialize array to hold count of digits
int[] digitArray = new int;
int remainder = 0;
// loop to get digits of the number
while (number > 0) {
// get the last digit
remainder = number % 10;
// increment the count of this digit
digitArray[remainder]++;
// remove the last digit from the number
number = number / 10;
}
System.out.println("-------------------------");
System.out.println("Number\tFrequency");
System.out.println("-------------------------");
// iterate over the digit array. Each count represents a digit from 0 to 9
for (int counter = 0; counter < digitArray.length; counter++) {
// get the count
int digitCount = digitArray[counter];
if (digitCount != 0) {
System.out.println(counter + "\t" + digitCount);
}
}
scanner.close();
}

Output

Enter the number
2345342
———————
Number   Frequency
———————
2              2
3              2
4              2
5              1

Method 2 : Using java.util.Map

Initialize a java.util.Map which will hold the digit as a key and its frequency of occurrence in the number as value.
As in the above example, each digit is extracted and every time it is put as a key, the value corresponding to the key is incremented.
In order the print the digits and their frequency count, the map is iterated.

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the number");
int number = scanner.nextInt();
// initialize map to hold digits and their count
Map<Integer, Integer> digitMap = new HashMap<Integer, Integer>();
int remainder = 0;
// loop to get digits of the number
while (number > 0) {
// get the last digit
remainder = number % 10;
// get the frequency count of this digit
Integer count = digitMap.get(remainder);
// for the first time count will be null, hence put 1
if (count == null) {
digitMap.put(remainder, 1);
} else {
// increment the count for this digit
digitMap.put(remainder, ++count);
}
// remove the last digit from the number
number = number / 10;
}
System.out.println("-------------------------");
System.out.println("Number\tFrequency");
System.out.println("-------------------------");
Iterator iterator = digitMap.keySet().iterator();
while (iterator.hasNext()) {
int digit = iterator.next();
int digitCount = digitMap.get(digit);
System.out.println(digit + "\t" + digitCount);
}
scanner.close();
}

Output

Enter the number
2345342
————————-
Number   Frequency
————————-
2              2
3              2
4              2
5              1

Let’s tweak in :

1. A java.util.Map stores values in key-value pairs. The keys are unique and when a value with an already existing key is inserted, it overwrites the previous value corresponding to that key.