user4779891
user4779891

Reputation:

Random Number Generator of Even and Odd Numbers

I need to create an application that generates 25 random integers between 0 and 99 and then outputs those integers on two separate lines one for odd numbers and one for even numbers. I will need to use one array for even numbers and one for odd numbers. This is what I have so far:

public static void main(String[] args) {

    //Odd Numbers
    int[] oddNums = new int[25];

    for (int index = 0; index < oddNums.length; index++) {
        oddNums[index] = (int) (Math.random()*99);
    }

    System.out.print("ODD: ");

    for (int index = 0; index < oddNums.length; index++) {
        System.out.print(oddNums[index] + " ");
    }

    //Even Numbers
    int[] evenNums = new int[25];

    for (int index = 0; index < evenNums.length; index++) {
        evenNums[index] = (int) (Math.random()*99);
    }

    System.out.print("\nEVEN: ");

    for (int index = 0; index < evenNums.length; index++) {
        System.out.print(evenNums[index] + " ");
    }

}

I have set up the program to print out 25 random integers, but I do not know how I am going to get the program to print out only even numbers on one line and odd numbers on another (I am new to java).

Here is a sample output I am getting:

ODD: 28 36 54 98 35 1 59 43 96 69 41 66 37 15 30 17 29 67 56 83 71 4 24 70 38
EVEN: 34 45 36 26 73 84 60 39 21 49 28 98 69 14 32 24 72 29 26 88 77 2 23 58 47

This is wrong since there are both even and odd numbers on both lines.

This is what the output should look like:

ODD: 25 97 23 45 63 91 13 47 93 51 29
EVEN: 22 94 46 74 18 48 32 84 28 92 56

There are only odd numbers on one line and even numbers on another line.

Does anyone know what I need to add here?

Upvotes: 2

Views: 10687

Answers (6)

Coding Champ
Coding Champ

Reputation: 36

A little modification to your program will yield the desired result.

public static void main(String[] args) {

    //Odd Numbers
    int[] randomNumbers = new int[25];
    int[] evenNumbers = new int[25];
    int[] oddNumbers = new int[25];
    int k = 0, l = 0;
    for (int index = 0; index < randomNumbers.length; index++) {
        randomNumbers[index] = (int) (Math.random() * 99);
    }
    for (int i = 0; i < 25; i++) {
        if (randomNumbers[i] % 2 == 0) {
            evenNumbers[k] = randomNumbers[i];
            k++;
        } else {
            oddNumbers[l] = randomNumbers[i];
            l++;
        }
    }
}

Upvotes: 2

maba
maba

Reputation: 48055

Here's a solution that uses Java 8 streams:

public class NumberGenerator {
    public static void main(String[] args) {
        Random random = new Random();
        int[] ints = random.ints(25, 0, 99).sorted().toArray();
        int[] even = IntStream.of(ints).filter(x -> x % 2 == 0).toArray();
        int[] odd = IntStream.of(ints).filter(x -> x % 2 == 1).toArray();
        System.out.println(Arrays.toString(even));
        System.out.println(Arrays.toString(odd));
    }
}

First an array of all random integers are being created. 25 random integers are created and they should all be between 0 and 99.

The evens and odds are filtered out into two separate arrays.

[0, 4, 6, 16, 18, 22, 40, 42, 58, 64, 82, 84, 98]
[7, 27, 29, 31, 35, 55, 73, 75, 75, 79, 83, 91]

Upvotes: 0

Oğuz K
Oğuz K

Reputation: 400

You can just generate the 25 number. After generating those ints, you can locate them in the array they belong.

int num;
int oddIndex = -1;
int evenIndex = -1;
for (index = 0; index < 25 ; index++){
      num = (int) (Math.random()*99);
      if (num % 2 == 1){
         oddIndex++;
         oddNum[oddIndex] = num;             
      }
      else{
         evenIndex++;
         evenNum[evenIndex] = num;
      }
 }

In this case, you're not sure about the sizes of each array. So, I advise you to use ArrayList instead of array. If you use an ArrayList, you won't need to deal with oddIndex and evenIndex.

Upvotes: 1

rossum
rossum

Reputation: 15685

At some point in your code, you need to have something like,

Pseudocode:

if (nextNumber is odd) then
   put nextNumber at end of ODD array
else
   put nextNumber at end of EVEN array
endif

You should also have a look at util.Random.nextInt() which is preferable for generating random integers.

Upvotes: 0

Msk
Msk

Reputation: 857

Firstly,The random function you have written will be generating random numbers between 0 and 99. It will not be considering whether the numbers are odd or even.

If there is no restriction on the number of odd numbers and number of even numbers, just use the random generator once and depending on whether it is odd or even place it in the correct array.

For doing so, use the MOD operator i.e. check for remainder after dividing by 2 to see odd or even

Upvotes: 0

vib
vib

Reputation: 2274

You can generate an even number uniformly at random in [0,100] with the formula n = 2*x where x is uniformly random in [0, 49].

You can similarly generate an uniformly random odd number with n = 2*x+1 where x is uniformly random in [0,49].

Upvotes: 1

Related Questions