Reputation: 41
I need to generate 25 random numbers and then separate them into two arrays, depending on whether they are odd or even. This is my expected output:
Even: 40 10 70 58 20 18 74 44 14 54 50 42
Odd: 21 75 29 69 7 41 33 35 21 13 93 73 33
This is what I have so far:
public static void main(String[] args) {
Scanner input = new Scanner(System.in).useDelimiter("\n");
int[] randomNumbers = new int[25];
int[] evenNumbers = new int[25];
int[] oddNumbers = new int[25];
int k = 0, l = 0;
for (int i= 0; i< randomNumbers.length; i++) {
randomNumbers[i] = (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++;
}
}System.out.print("Even: ");
for (int i = 0; i< evenNumbers.length; i++) {
System.out.print(evenNumbers[i] + " ");
}System.out.println("");
System.out.print("Odd: ");
for (int i= 0; i < oddNumbers.length; i++) {
System.out.print(oddNumbers[i] + " ");
}
}
}
Here is my actual output:
Even: 40 10 70 58 20 18 74 44 14 54 50 42 0 0 0 0 0 0 0 0 0 0 0 0 0
Odd: 21 75 29 69 7 41 33 35 21 13 93 73 33 0 0 0 0 0 0 0 0 0 0 0 0
I would like to know how to get rid of the zeros at the end of each output.
Upvotes: 3
Views: 3231
Reputation: 3323
I would suggest you a different approach :)
1) You don't need two for loops - one to generate random numbers and the second to separate them in odd and even. You can do this with one the for-loop.
2) Use List<Integer>
instead array. Use array only if it is requered by the task.
3) Perhaps, you don't need randomNumbers
variable.
4) If you use 0 as special value be careful. It is possible to get zero value from Math.random()
Math.random() and zero value.
So this is the code
public static void main(String[] args) {
int NUM_OF_NUMS = 25;
List<Integer> randomNumbers = new ArrayList<>();
List<Integer> evenNumbers = new ArrayList<>();
List<Integer> oddNumbers = new ArrayList<>();
for (int i = 0; i < NUM_OF_NUMS; i++) {
int randomNumber = (int) (Math.random() * 99);
randomNumbers.add(randomNumber);
if (randomNumber % 2 == 0) {
evenNumbers.add(randomNumber);
} else {
oddNumbers.add(randomNumber);
}
}
printArrays(evenNumbers, oddNumbers);
}
private static void printArrays(List<Integer> evenNumbers, List<Integer> oddNumbers) {
System.out.print("Even: ");
for (int num : evenNumbers) {
System.out.print(num + " ");
}
System.out.println("");
System.out.print("Odd : ");
for (int num : oddNumbers) {
System.out.print(num + " ");
}
}
Upvotes: 0
Reputation: 11
package test2;
import java.util.Scanner;
public class StackO1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in).useDelimiter("\n");
int[] randomNumbers = new int[25];
int[] evenNumbers = new int[25];
int[] oddNumbers = new int[25];
int k = 0, l = 0;
for (int i= 0; i< randomNumbers.length; i++) {
randomNumbers[i] = (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++;
}
}System.out.print("Even: ");
for (int i = 0; i< k; i++) {
System.out.print(evenNumbers[i] + " ");
}System.out.println("");
System.out.print("Odd: ");
for (int i= 0; i < l; i++) {
System.out.print(oddNumbers[i] + " ");
}
}
}
Upvotes: 1
Reputation: 1453
The zeros are printed because you have created an array of 25 ints
. Each of these 25 ints
are initialized to zeros(the default value for primitive int
in java).
To achieve your goal you have two options:
ArrayList<Integer>
instead of an array. ArrayList
is just a resizing array internally.. ORUpvotes: 1
Reputation: 292
When an int array is initiated, it is filled with 0s as the initial value. You have 2 options.
Option 1:
import java.util.ArrayList;
And use an ArrayList to store the latter even and odd integers. This is not an optimal solution as you are looking for a small amount of numbers.
Option 2:
Stop calling the System.out.println(); function when a 0 is reached. 0 is considered an even number, so you need to start printing the odd numbers, count how many there are and stop at a 0 and then start printing the remaining even numbers. Code:
int count = 0;
System.out.print("Odd: ");
for (int i= 0; i < oddNumbers.length; i++) {
if (oddNumbers[i]!=0) {
System.out.print(oddNumbers[i] + " ");
count++;
}
}
System.out.print(System.lineSeparator()+"Even: ");//Uses the system-specific new-line character which is extracted with System.lineSeparator().
for (int i = 0; i< evenNumbers.length; i++) {
count++;
if (count==26) {
break;
}
System.out.print(evenNumbers[i] + " ");
}
Upvotes: 2
Reputation: 88707
int[] evenNumbers = new int[25];
will create an array of 25 ints that are initialized to 0.
The loop will then print all 25 of those ints, even if they haven't been replaced:
for (int i = 0; i< evenNumbers.length; i++) {
System.out.print(evenNumbers[i] + " ");
}
To fix that either loop from 0 to k-1 (e.g. i < k
) or use List<Integer>
instead of an int
array.
The same applies to the odd numbers, you'd just use i < l
instead.
Upvotes: 3