[英]25 Random Numbers Generator of Even and Odd
I need to generate 25 random numbers and then separate them into two arrays, depending on whether they are odd or even. 我需要生成25个随机数,然后将它们分成两个数组,具体取决于它们是奇数还是偶数。 This is my expected output:
这是我的预期输出:
Even: 40 10 70 58 20 18 74 44 14 54 50 42 甚至: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 奇数: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 偶数: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 奇数: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. 我想知道如何摆脱每个输出结束时的零。
int[] evenNumbers = new int[25];
will create an array of 25 ints that are initialized to 0. 将创建一个25个整数的数组,初始化为0。
The loop will then print all 25 of those ints, even if they haven't been replaced: 然后循环将打印所有这 25个整数,即使它们没有被替换:
for (int i = 0; i< evenNumbers.length; i++) {
System.out.print(evenNumbers[i] + " ");
}
To fix that either loop from 0 to k-1 (eg i < k
) or use List<Integer>
instead of an int
array. 要修复从0到k-1的循环(例如
i < k
)或使用List<Integer>
而不是int
数组。
The same applies to the odd numbers, you'd just use i < l
instead. 这同样适用于奇数,你只需使用
i < l
。
When an int array is initiated, it is filled with 0s as the initial value. 启动int数组时,将使用0作为初始值。 You have 2 options.
你有2个选择。
Option 1: 选项1:
import java.util.ArrayList; import java.util.ArrayList;
And use an ArrayList to store the latter even and odd integers. 并使用ArrayList存储后者的偶数和奇数整数。 This is not an optimal solution as you are looking for a small amount of numbers.
这不是最佳解决方案,因为您正在寻找少量数字。
Option 2: 选项2:
Stop calling the System.out.println(); 停止调用System.out.println(); function when a 0 is reached.
达到0时运行。 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.
0被认为是偶数,因此您需要开始打印奇数,计算有多少并停在0,然后开始打印剩余的偶数。 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] + " ");
}
The zeros are printed because you have created an array of 25 ints
. 打印零是因为您创建了一个25个
ints
的数组。 Each of these 25 ints
are initialized to zeros(the default value for primitive int
in java). 这25个
ints
中的每一个都初始化为零(java中的原始int
的默认值)。
To achieve your goal you have two options: 为了实现您的目标,您有两种选择:
ArrayList<Integer>
instead of an array. ArrayList<Integer>
而不是数组。 ArrayList
is just a resizing array internally.. OR ArrayList
只是一个内部调整大小的数组..或者 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] + " ");
}
}
}
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. 1)你不需要两个for循环 - 一个用于生成随机数,第二个用于将它们分成奇数和偶数。 You can do this with one the for-loop.
您可以使用for循环执行此操作。
2) Use List<Integer>
instead array. 2)使用
List<Integer>
代替数组。 Use array only if it is requered by the task. 仅在任务重新使用数组时才使用数组。
3) Perhaps, you don't need randomNumbers
variable. 3)也许,你不需要
randomNumbers
变量。
4) If you use 0 as special value be careful. 4)如果使用0作为特殊值则要小心。 It is possible to get zero value from
Math.random()
Math.random() and zero value. 可以从
Math.random()
Math.random()和零值获得零值。
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 + " ");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.