【问题标题】:Java - Cant get it to workJava - 无法让它工作
【发布时间】:2016-02-24 17:38:00
【问题描述】:

我已经尝试完成这几个小时了。由于用户输入,我的程序应该生成随机数。然后程序将这些数字分成两个新的偶数和奇数数组。我已经解决了“生成的随机数”部分,但现在我也需要将偶数和奇数转移到两个新数组中。

输出应该是这样的:

How many random numbers between 0 - 999 do you want? **12**

Here are the random numbers:
145 538 56 241 954 194 681 42 876 323 2 87

These 7 numbers are even:
538 56 954 194 42 876 2

These 5 numbers are odd:
145 241 681 323 87

这是我现在的代码:

import java.util.Scanner;

public class SlumpadeTal {

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    System.out.println("Hur många slumptal i intervallet 0 - 999 önskas?");
    int antal = input.nextInt();

    System.out.println("Här är de slumpade talen:");

    int[] arrayen = new int[antal];
    for (int i = 0; i < arrayen.length; i++) {
        arrayen[i] = (int) (Math.random() * 999 + 1);

        System.out.print(arrayen[i] + " ");
        if ((arrayen[i] % 2) == 0) {

            }
        }
    }
}

请注意,我不能为此使用任何类。比如Arraylist、Vector等!

【问题讨论】:

  • 您是否有一些代码试图将偶数和奇数分开?请张贴。
  • 小建议(我知道这与这个问题没有任何关系,但我还是想说):尽量保持你的代码(变量名等)英文,它使共享代码很多更轻松。另外,就我自己而言,我不是以英语为母语的人,但我发现用英语编程更容易,因为由于语法、语言关键字、现有库等原因,其中一半还是英语

标签: java arrays random numbers java.util.scanner


【解决方案1】:

一个简单的解决方案是计算偶数和奇数的数量, 创建这些大小的数组,然后再次遍历原始数组以将每个数字放在适当的位置。

编辑:类似这样的:

int evenCounter = 0;
int oddCounter = 0;
Scanner input = new Scanner(System.in);
System.out.println("Hur många slumptal i intervallet 0 - 999 önskas?");
int antal = input.nextInt();

System.out.println("Här är de slumpade talen:");

int[] arrayen = new int[antal];
for (int i = 0; i < arrayen.length; i++) {
    arrayen[i] = (int) (Math.random() * 999 + 1);

    System.out.print(arrayen[i] + " ");
    if ((arrayen[i] % 2) == 0) {
         evenCounter++;
        }
    else
         oddCounter++;
    }
}
int[] evenArray = new int[evenCounter];
int[] oddArray = new int[oddCounter];
evenCounter = 0;
oddCounter = 0;
for (int i =0; i < arrayen.length; i++){
    if ((arrayen[i] % 2) == 0) {
         evenArray[evenCounter] = arrayen[i];
         evenCounter++;
        }
    else{
         oddArray[oddCounter] = arrayen[i];
         oddCounter++;
    }
}

【讨论】:

  • 您也可以使用 ArrayList 或 Vector 来不再遍历数组,但这通常效率较低
  • 但是如果用户想要100个随机数呢?如何将偶数和奇数放在两个单独的数组中?模数“arrayen[i] == 0”对偶数进行排序,但如何将这些数字保存到新数组中?我迷路了:(
  • 再次查看代码并尝试了解第一个 for 循环之后发生的情况。正在创建新的数组来保存偶数和奇数。正如其他答案中所说 - 您可以使用 ArrayList 来避免第二个循环。如果可能,我通常会尽量远离动态长度数据结构。
  • 你是最棒的!我编辑了我的文本,我不能使用任何类,例如 ArrayList、vector 等。
  • 抱歉打扰.. 但它似乎不起作用。多次输出为“[I@135fbaa4”。似乎也无法在正确的位置获得字符串“这 7 个数字是偶数:”和“这 5 个数字是奇数:”。非常感谢您的帮助@user3445972
【解决方案2】:

我的解决方案是在生成数字后将数字分为奇数或偶数。使用arraylist会比数组好,因为它的容量会自动增长,适合你的情况,因为你不知道每次会生成多少个偶数或奇数。

【讨论】:

  • 见鬼,你比我快 9 秒 :( :P
  • 那个节目arraylist应该更适合这种情况。 :)
【解决方案3】:

您的代码 (if ((arrayen[i] % 2) == 0)) 中的 if 语句是正确的。

我建议不要创建新数组,而是创建一个具有动态长度的集合类型,例如ArrayList。这样您就不必担心首先确定大小,因此不必迭代两次。

如果您出于某种原因确实需要一个数组,您可以随时使用ArrayList#toArray(T[]) 将 ArrayList 转换为一个数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多