user2809115
user2809115

Reputation: 67

Putting numbers in specific ranges giving out weird output

I'm trying to put my generated numbers into a specific range but it keeps giving me this output:

200 Generated numbers, 10 per line: 
99 Numbers from 0-20: 1
Numbers from 20-40: 0
Numbers from 40-60: 0
Numbers from 60-80: 0
Numbers from 80-100: 0
18 Numbers from 0-20: 2
Numbers from 20-40: 0
Numbers from 40-60: 0
Numbers from 60-80: 0
Numbers from 80-100: 0
56 Numbers from 0-20: 3

Here is my current code:

import java.util.Random;

public class RandomStats2 {

    public static void main(String[] args) {
        Random random = new Random ();
        int[] num = new int [5];
        System.out.println("200 Generated numbers, 10 per line: ");
        int numbersOnThisLine = 0;

        for(int i = 0; i < 200; i++){
            int nextNumber = random.nextInt(101);
            System.out.print(nextNumber + " ");
            numbersOnThisLine++;    

            if (numbersOnThisLine == 10){
                System.out.print("\n");
                numbersOnThisLine = 0;
            }

            if(i <=21) num[0]++;
            else if(i <=41) num[1]++;
            else if(i <=61) num[2]++;
            else if(i <=81) num[3]++;
            else if(i <=100) num[4]++;
            System.out.println("Numbers from 0-20: " + num[0]);
            System.out.println("Numbers from 20-40: " + num[1]);
            System.out.println("Numbers from 40-60: " + num[2]);
            System.out.println("Numbers from 60-80: " + num[3]);
            System.out.println("Numbers from 80-100: " + num[4]);               
        }   
    }
}

How can I fix this? Also, how would I set a range like 41-60 in the else if statements?

Upvotes: 0

Views: 166

Answers (5)

blacktide
blacktide

Reputation: 12076

Moving the calls to System.out.println() outside of your for loop will resolve the issue with the repeated output. Also, your current if and else if statements are not checking for the right values. Try this:

if (nextNumber <= 20) num[0]++;
else if (nextNumber <= 40) num[1]++;
else if (nextNumber <= 60) num[2]++;
else if (nextNumber <= 80) num[3]++;
else if (nextNumber <= 100) num[4]++;

Upvotes: 0

Robin Dijkhof
Robin Dijkhof

Reputation: 19278

You want to check you nextNumber so I think you want this:

if(nextNumber <21){ num[0]++;}
else if(nextNumber <41){ num[1]++;}
else if(nextNumber <61){ num[2]++;}
else if(nextNumber <81){ num[3]++;}
else if(nextNumber <101){ num[4]++;}

Also, use these {} whenever you are working with if-else.

Second, print after the loop ended.

Upvotes: 1

Алексей
Алексей

Reputation: 1847

your statistics needs to be out of the for loop like this:

import java.util.Random;

public class RandomStats2 {

public static void main(String[] args) {
    Random random = new Random ();
    int[] num = new int [5];
    System.out.println("200 Generated numbers, 10 per line: ");
    int numbersOnThisLine = 0;

    for(int i = 0; i < 200; i++){
        int nextNumber = random.nextInt(101);
        System.out.print(nextNumber + " ");
        numbersOnThisLine++;    

        if (numbersOnThisLine == 10){
            System.out.print("\n");
            numbersOnThisLine = 0;
        }

        if(i <=21) num[0]++;
        else if(i <=41) num[1]++;
        else if(i <=61) num[2]++;
        else if(i <=81) num[3]++;
        else if(i <=100) num[4]++;              
    }   
    System.out.println("Numbers from 0-20: " + num[0]);
    System.out.println("Numbers from 20-40: " + num[1]);
    System.out.println("Numbers from 40-60: " + num[2]);
    System.out.println("Numbers from 60-80: " + num[3]);
    System.out.println("Numbers from 80-100: " + num[4]); 
}

}

Also for the if statements i think you meant to use nextNumberand not i, since i is you loop counter

Upvotes: 0

Slihp
Slihp

Reputation: 793

Looking at your code, it looks like you want to print out the ranges every 10th iteration. If so, move your print statements inside the if statement as below.

import java.util.Random;

public class RandomStats2 {

    public static void main(String[] args) {
        Random random = new Random ();
        int[] num = new int [5];
        System.out.println("200 Generated numbers, 10 per line: ");
        int numbersOnThisLine = 0;

        for(int i = 0; i < 200; i++){
            int nextNumber = random.nextInt(101);
            System.out.print(nextNumber + " ");
            numbersOnThisLine++;    

            if (numbersOnThisLine == 10){
                System.out.print("\n");
                numbersOnThisLine = 0;
                System.out.println("Numbers from 0-20: " + num[0]); 
                System.out.println("Numbers from 20-40: " + num[1]);
                System.out.println("Numbers from 40-60: " + num[2]);
                System.out.println("Numbers from 60-80: " + num[3]);
                System.out.println("Numbers from 80-100: " + num[4]);
            }

            if(i <=21) num[0]++;
            else if(i <=41) num[1]++;
            else if(i <=61) num[2]++;
            else if(i <=81) num[3]++;
            else if(i <=100) num[4]++;            
        }   
    }
}

Upvotes: 0

Daniel Larsson
Daniel Larsson

Reputation: 6394

Are you really supposed to do all of that inside of the for loop? I am not sure of what you are trying to accomplish, but a wild suggestion is to print it out outside of the loop.

Right now you are printing what you have found for every random integer.

Upvotes: 0

Related Questions