偶数和奇数的随机数发生器

Random Number Generator of Even and Odd Numbers

我需要创建一个应用程序,生成 0 到 99 之间的 25 个随机整数,然后将这些整数输出到两行单独的行中,一行用于奇数,一行用于偶数。我需要对偶数使用一个数组,对奇数使用一个数组。这是我目前所拥有的:

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] + " ");
    }

}

我已经将程序设置为打印出 25 个随机整数,但我不知道如何让程序在一行上打印偶数而在另一行打印奇数(我是新手java).

这是我得到的示例输出:

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

这是错误的,因为两条线上都有偶数和奇数。

输出应该是这样的:

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

一行只有奇数,另一行只有偶数。

有人知道我需要在这里添加什么吗?

您可以使用公式 n = 2*x 在 [0,100] 中均匀随机生成偶数,其中 x 在 [0, 49] 中均匀随机。

您可以类似地生成一个 n = 2*x+1 的均匀随机奇数,其中 x 在 [0,49] 中均匀随机。

首先,您编写的随机函数将生成0到99之间的随机数。它不会考虑数字是奇数还是偶数。

如果对奇数和偶数的个数没有限制,只用一次随机生成器,看是奇数还是偶数放在正确的数组中。

为此,请使用 MOD 运算符,即检查除以 2 后的余数以查看奇数或偶数

在你的代码中的某些时候,你需要有类似的东西,

伪代码:

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

您还应该看看 util.Random.nextInt(),它更适合生成随机整数。

对您的程序稍加修改就会产生所需的结果。

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++;
        }
    }
}

您只需生成 25 号即可。生成这些整数后,您可以在它们所属的数组中定位它们。

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;
      }
 }

在这种情况下,您不确定每个数组的大小。所以,我建议你使用 ArrayList 而不是数组。如果使用 ArrayList,则无需处理 oddIndex 和 evenIndex。

这是一个使用 Java 8 个流的解决方案:

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));
    }
}

首先创建一个包含所有随机整数的数组。创建了 25 个随机整数,它们都应该在 0 到 99 之间。

偶数和赔率被过滤到两个单独的数组中。

[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]