How do I make a program that counts the occurrence of each individual digit between 1 and 100?

I’m making a program that counts how many times each digit (0-9) occurs in each number between 1 to 100. At the end it will say something like:

The digit 0 showed up ____ times between 1-100
The digit 1 showed up ____ times between 1-100

and so forth.

This is what I have:

public class CountEachDigit {

    public static void main(String[] args) {

        int counter =0;

        int[] digit = new int[10];

        for (int i=1;i<=100;i++) {
    
            for (int j=0;j<=9;j++){
  
                try{
                    String a = String.valueOf(i);
                    String b = String.valueOf(j);
                    if (b.equals(a.charAt(0)))
                            counter++;
                            digit[j]=counter;
                } catch (Exception e){
                    continue;
                }

                try{
                    String a = String.valueOf(i);
                    String b = String.valueOf(j);
                    if (b.equals(a.charAt(1)))
                        counter++;
                        digit[j]=counter;
                } catch (Exception e){
                    continue;
                }

                try{
                    String a = String.valueOf(i);
                    String b = String.valueOf(j);
                    if (b.equals(a.charAt(2)))
                        counter++;
                        digit[j]=counter;
                } catch (Exception e){
                    continue;
                }
    
            }
        }

        for (int j =0;j<=9;j++){
            System.out.println("The number "+j+" appears "+digit[j]+" times between 1 - 100.");
        }
    }
}

I tried changing the charAt each digit to a String to count the occurrence using the try and catch. No dice so far.

>Solution :

You do not need a string operations. You have to use x % 10 to get the last digit, and then x \= 10, to remove this last digit.

public class CountEachDigit {

    public static void main(String... args) {
        final int lo = 1;
        final int hi = 100;
        int[] digits = countDigits(lo, hi);

        for (int i = 0; i < 10; i++)
            System.out.format("The number %d appears %d times between %d - %d.\n", i, digits[i], lo, hi);
    }

    private static int[] countDigits(int lo, int hi) {
        int[] digits = new int[10];

        for (int i = lo; i <= hi; i++) {
            if (i == 0) {
                digits[0]++;
            } else {
                int val = i;

                do {
                    digits[val % 10]++;
                } while ((val /= 10) > 0);
            }
        }

        return digits;
    }

}

Demo:

The number 0 appears 11 times between 1 - 100.
The number 1 appears 21 times between 1 - 100.
The number 2 appears 20 times between 1 - 100.
The number 3 appears 20 times between 1 - 100.
The number 4 appears 20 times between 1 - 100.
The number 5 appears 20 times between 1 - 100.
The number 6 appears 20 times between 1 - 100.
The number 7 appears 20 times between 1 - 100.
The number 8 appears 20 times between 1 - 100.
The number 9 appears 20 times between 1 - 100.

Leave a Reply