【发布时间】: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 <= array.length; n++). -
@AndyTurner 我听到了,但我不得不做多线程。我从概念上理解它,而不是实施。我之前已经通过大量的试验和错误以及来自互联网的帮助完成了它。