【问题标题】:Method to fill array with prime numbers in array in javajava用数组中的素数填充数组的方法
【发布时间】:2018-04-19 21:53:05
【问题描述】:

编写一个方法,当给定一个整数值时,检查该值是否为素数。 使用您之前的答案,编写用前 20 个素数填充数组的代码。

我已经解决了第一部分,并有一个名为 checkPrime(int n) 的方法,它返回 true 或 false。我对第二部分应该使用哪个循环感到困惑,我试图做这样的事情但被卡住了:

public static void fillArray() {
    int[] arr = new arr[20];
    n = 1;

    for (int i = 0; i < 20; i++) {
        if (checkPrime(n) == True) {
            arr[i] = n;
            n++;
        } else {
            n++;
        }
}

在这里,如果数字不是素数,n 正在递增,但我们不会再次检查它是否为素数。任何帮助表示赞赏。

【问题讨论】:

  • 在里面使用嵌套的while循环。 while(!checkPrime) { n++ } 然后将其添加到数组中。
  • 也没有必要做 checkPrime(n) == true。只需执行 checkPrime(n)
  • 没有问题。祝你好运
  • 最好调用你的checkPrime()方法,isPrime()。这更符合 Java 命名约定。
  • @stephen Docy 感谢编辑!

标签: java arrays primes


【解决方案1】:

您需要一个变量来保持您在输出数组中的位置,并需要另一个变量在循环中递增以测试素数。而且,我会返回我构建的int[]。并将所需元素的数量传递给函数。当它是素数时,将其添加到数组中。循环直到您的数组索引等于您的数组长度。它是int[](不是arr[])。喜欢,

public static int[] fillArray(int count) {
    int[] arr = new int[count];
    int n = 0;
    for (int i = 1; n < arr.length; i++) {
        if (checkPrime(i)) {
            arr[n] = i;
            n++;
        }
    }
    return arr;
}

,如果您使用的是 Java 8+,则可以使用 IntStreamfilterlimit。喜欢,

public static int[] fillArray(int count) {
    return IntStream.range(1, Integer.MAX_VALUE)
            .filter(x -> checkPrime(x))
            .limit(count).toArray();
}

【讨论】:

  • 据我了解,您只检查素数直到数组长度的值。但这不一定会用前 n(20) 个数字填充数组。会吗?
  • @noogler 只要count20,它就会。因为循环不变量是针对n(不是i)。
  • 啊,好吧,我的错。谢谢我不知道我们可以在循环中有两个不同的变量。一直认为我们必须在 i 上进行循环。谢谢!
【解决方案2】:

像这样做,直到循环找到一个 prine 数并将其添加到数组中,i 才会增加

public static void fillArray(){
int[] arr = new arr[20];
int n -1;
for ( int i = 0; i < 20; ){
if (checkPrime(n) == True){
arr[i] = n;
n++;
i++;
}else {
n++}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2021-06-03
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多