'Frequency of each value in an array of random integers

Need help with an assignment where I have to generate random runs between 1 to 6 for 30 balls and get : 1.Total runs scored 2.Number of 0s, 1s, 2s, 3s, 4s and 6s 3.Strike Rate

While I have got 'Total runs' and 'Strike rate', I am unable to get the frequency of 0s,1s... I have tried using counter and stream method, but can't seem to get it right. Your help is highly appreciated. Thank you!

And here's the actual code, I have marked the frequency part as block for now so that atleast other methods execute...

import java.util.Random;
public class Assignment_2 {
    
    public static void main(String[] args) {
        Random r = new Random();
        System.out.println("Runs for 30 balls");
        int ball[] = new int[30];
        for(int i=0; i<ball.length; i++)
        {
            ball[i] = r.nextInt(6);
            System.out.print(ball[i]+" , ");**
         
    /*  int zeros = 0;
        int ones = 0;
        int twos = 0;
        int threes = 0;
        int fours = 0;
        int fives = 0;
        int sixes = 0;
            if (r.nextInt() == 0 ) {
                zeros++;
            } 
            else if (r.nextInt() == 1) {
                ones++;
            } 
            else if (r.nextInt() == 2) {
                twos++;
            }
            else if (r.nextInt() == 3) {
                threes++;
            }
            else if (r.nextInt()== 4) {
                fours++;
            }
            else if (r.nextInt() == 5) {
                fives++;
            }
            else if (r.nextInt() == 6) {
                sixes++;
            }
            System.out.println(zeros);
            System.out.println(ones);
            System.out.println(twos);
            System.out.println(threes);
            System.out.println(fours);
            System.out.println(fives);
            System.out.println(sixes);
    */
        **}
        
        System.out.println();
        
        System.out.println("Runs Scored");
        float TR=0;
        for(int i : ball)
        {
            TR += i;
        }  
        System.out.print(TR);
        
        System.out.println();
        
        System.out.println("Strike Rate");
        float SR=(TR/30)*100;
        System.out.print(SR);
        
        System.out.println();
        
        
    }
}


Solution 1:[1]

 if (r.nextInt() == 0 )

etc is comparing a newly generated random number. You want to compare what is already used for the ball:

if ( ball[i] == 0 ) .. etc. although using an array to store the counts instead of individual variables would be cleaner and less code.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 OldProgrammer