【问题标题】:Output amount of primes in array输出数组中素数的数量
【发布时间】:2015-12-02 22:32:44
【问题描述】:

我在 Java 方面是个新手,但不是很擅长。对我来说,这是一个反复试验的过程。

我正在开发一个 Java 程序来输出数组中素数的数量。我可以让它输出素数,但我也想输出素数的数量。我尝试将每个素数添加到名为“primes”的数组列表中,然后在程序结束时返回“primes.size()”。它没有按预期工作。计数实际上是关闭的。当我创建一个由 5 个数字组成的数组时,它会输出 3 个素数、2、3 和 5。但是它说我有 4 个素数。我认为它可能将 1 视为素数。因为当我创建一个 20 的数组时,素数输出 2、3、5、7、11、13、17 和 19。然后它说总素数 = 9。不过应该是 8。

这是我的代码

public class Prime {
    public static void main(String[] args) {
        int index = 0;
        Scanner scan = new Scanner(System. in );
        System.out.println("How big would you like the array? ");
        int num = scan.nextInt();
        int[] array = new int[num];
        ArrayList < Integer > primes = new ArrayList < Integer > ();

        //System.out.println("How Many threads? ");
        //int nThreads = scan.nextInt();  // Create variable 'n'  to handle whatever integer the user specifies.  nextInt() is used for the scanner to expect and Int.

        //Thread[] thread = new Thread[nThreads];     
        for (int n = 1; n <= array.length; n++) {
            boolean prime = true;

            for (int j = 2; j < n; j++) {
                if (n % j == 0) {
                    prime = false;
                    break;
                }
            }

            if (prime) {
                primes.add(n);
            }

            if (prime && n != 1) {

                System.out.println(n + "");
            }

        }
        System.out.println("Total Prime numbers = " + primes.size());
        System.out.println("Prime Numbers within " + array.length);
    }
}

原谅它的草率。我实际上计划向它添加多线程,但我想先解决这个问题。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 为什么要区分打印一个数字作为素数和添加到素数列表的决定?它们应该是相同的。您从打印中排除 1,但不添加。
  • 如果你是Java新手,我可以建议你不要尝试考虑多线程吗?直到你完全掌握了基础知识,然后再做一些。
  • 附注 - 您不需要 array 变量,因为您只使用它的长度并且不存储任何值。只需将其删除并使用num 而不是array.length
  • 是的,您将 1 视为素数。从 2 开始 for 循环以忽略它:for (int n = 2; n &lt;= array.length; n++).
  • @AndyTurner 我听到了,但我不得不做多线程。我从概念上理解它,而不是实施。我之前已经通过大量的试验和错误以及来自互联网的帮助完成了它。

标签: java arrays arraylist


【解决方案1】:

您已在素数数组中包含1,因为您在1 开始了n for 循环。由于最后的if 语句,您不会打印它,但它在ArrayList 中。

n = 2 开始你的n for 循环。因此,您不需要最后的if 语句,因为n 永远不会是1。您可以在将素数添加到ArrayList 的同时打印素数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2013-08-07
    • 2022-11-01
    • 2020-07-21
    • 2021-03-14
    相关资源
    最近更新 更多