简体   繁体   English

25个随机数偶数和奇数发生器

[英]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: 为了实现您的目标,您有两种选择:

  1. You can use an ArrayList<Integer> instead of an array. 您可以使用ArrayList<Integer>而不是数组。 ArrayList is just a resizing array internally.. OR ArrayList只是一个内部调整大小的数组..或者
  2. You have to include two counters that keep track of how many elements you have inserted in both the odd/even arrays. 您必须包含两个计数器,用于跟踪您在奇数/偶数数组中插入的元素数量。
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM