Is there something wrong with my nested for-loop? counting and incrementing values of arrays

So, I generate a 100 numbers between the range of 0 and 9. I store these 100 numbers in an array called 'array'. Then I have the array called 'count'. It has 10 elements, and I wanted to check the following: for each element in 'array' if it equals to 0-9 then count[0-9] increments by 1, count[0] = how many times number 0 appears and so on count[1] = 1, count[2] = 2... . I just keep getting the output of around 20k numbers and i suppose? the sum of each element?, no idea why. I was wondering if there is something major wrong with my for loop?

import java.util.*;

class RandomInt {
    public static void main(String[] args) {
        int size = 100;
        int max = 10;
        int[] array = new int[size];
        int[] count = new int[max]; //count[0,0,0,0,0,0,0,0,0,0]
        int loop = 0;

        Random generator = new Random();


        for (int i = 0; i < size; i++) {
            array[i] = generator.nextInt(max); // Generates 100 random numbers between 0 and 9 and stores them in array[]
            System.out.print(array[i]);
            for (int x = 0; x < size; x++) {// loop through 10 elements in count
                for(int j = 0; j < 10; j++){ //loop through 100 elements in array
                    if (array[x] == j) {// loop through each 100 elements of array[x] and if element array[x] = value
                        count[j] += 1; // then count[x] = x + 1
                        System.out.print(count[j]);
                    }
                }
            }
        }

        System.out.println("0 appears " + count[0] + " times.");
    }
}

Upvotes: 2

Views: 1590

Answers (5)

Jaithera
Jaithera

Reputation: 122

Your Login is Perfect only mistake which i found u made is with the brackets........!

Generate the numbers using first loop and then count the number of occurrence using different for loop.

Here is your code's modified version which generates 10 numbers and counts the individual number occurrence count.....

public class RandomInt {
 public static void main(String[] args) {
    int size = 10;
    int max = 10;
    int[] array = new int[size];
    int[] count = new int[max]; //count[0,0,0,0,0,0,0,0,0,0]
    int loop = 0;

    Random generator = new Random();


    for (int i = 0; i < size; i++) 
    {
        array[i] = generator.nextInt(max); // Generates 100 random numbers between 0 and 9 and stores them in array[]
        System.out.print(array[i]+" ");
    }

    for (int x = 0; x < size; x++) 
    {// loop through 10 elements in count
            for(int j = 0; j < 10; j++)
            { //loop through 100 elements in array
                if (array[x] == j) 
                {// loop through each 100 elements of array[x] and if element array[x] = value
                    count[j] += 1; // then count[x] = x + 1
                    //System.out.print(count[j]);
                }
            }

    }

    System.out.println("3 appears " + count[3] + " times.");
}

}

Upvotes: 1

Elliott Frisch
Elliott Frisch

Reputation: 201437

You probably shouldn't do your count until you have finished assigning your numbers, but here is how you could. Note that you want the value at array[i] to be your index to count.

for (int i = 0; i < size; i++) {
  array[i] = generator.nextInt(max); // Generates random numbers
  count[array[i]]++;
}
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(count));

Upvotes: 0

Kevin L
Kevin L

Reputation: 1066

You've nested your counting loop inside of your random number generating loop. Move the counting part outside.

Edit: The reason you're getting like 20k or whatever instances of zero is because when you set array[0] with a random value, you also check how many instances of 0 are in array[1] to array[99].

Upvotes: 1

jluckin
jluckin

Reputation: 662

To increment your counter, you don't need to have two nested for loops. Instead, you can use the value of array[x] as your counter.

for (int i = 0; i < size; i++) {
    count[array[i]]++
}

Upvotes: 1

Adam Yost
Adam Yost

Reputation: 3625

There's a simpler way to do this without nested loops, so forgive me for suggesting this as a fix rather than finding the issue in the loop.

for(int i=0; i<size; i++){
   int num = generator.nextInt(max);
   array[i] = num;
   count[num]++;
}

One loop, incrementing the count for each number as it appears. You may need to ensure all the entries in count start at 0, but even then an additional loop through 10 entries is MUCH faster.

Upvotes: 1

Related Questions