问题是:
编写一个Java程序以接受任何20个数字并仅显示那些质数。
我的代码是:
import java.io.*;
class primenumber
{
public static void main(String args[]) throws IOException
{
InputStreamReader read = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(read);
int i,j,n;
int p = 0;
for(i=1;i<=20;i++)
{
System.out.println("Enter a number");
n = Integer.parseInt(in.readLine());
p = 0;
for(j=1;j<=n;j++)
{
if(n%j==0)
p++;
}
if(p==2)
System.out.println(n);
}
}
}
这正确吗?
答案 0 :(得分:1)
从我从阅读程序中可以看出来的是正确的:它执行了赋值操作而没有数组。
根据您课堂上的要求,可能会争辩说缺少输入验证。如果我输入-4
,则您的程序将不会打印它(这可能被认为是正确的?),但是如果我输入3.14
或apple
,它可能会崩溃。
有一些次要的问题,但是当您询问正确性时,答案是肯定的。
答案 1 :(得分:1)
要在用户输入完数字后打印输出,则需要使用数组或List
。我使用ArrayList
编写了函数,以累积用户输入,然后计算素数,最后显示结果。
在第一部分中,我更改了解析时要求输入重试输入的方式。这样,您就不会丢失之前输入的所有数字。
List<Integer> numbers = new ArrayList<>();
InputStreamReader read = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(read);
System.out.println("Enter " + total + " numbers: ");
int total = 20;
for (int i = 1; i <= total; i++) {
try {
System.out.print(i + " of " + total + ": ");
numbers.add(Integer.parseInt(in.readLine()));
} catch (NumberFormatException e) {
System.err.println("Cannot parse input as integer");
i--;
}
}
这与您的问题无关,但是我也对您计算质数的方式进行了一些更改,以使其在遍历大值时可以更快地运行。
List<Integer> primes = new ArrayList<>();
System.out.println("Calculating primes...");
for (int n : numbers) {
boolean isPrime = true;
if (n > 1) {
for (int dividend = 2; dividend <= n / 2; dividend++) {
if (n % dividend == 0) {
isPrime = false;
break;
}
}
if (isPrime)
primes.add(n);
}
}
最后要打印素数列表,我首先使用Java 8自然顺序比较器以升序对列表进行排序。这使输出更易于阅读。
primes.sort(Comparator.naturalOrder());
if (primes.isEmpty()) {
System.out.println("No prime numbers found");
} else {
System.out.println("primes: " + primes);
}
示例输出
Enter 20 numbers: 1 of 20: 1 2 of 20: 2 3 of 20: 3 4 of 20: 4 5 of 20: 5 6 of 20: 7 7 of 20: 9 8 of 20: 11 9 of 20: 13 10 of 20: 17 11 of 20: Cannot parse input as integer 11 of 20: 99999999999999 Cannot parse input as integer 11 of 20: 123456789 12 of 20: 987654321 13 of 20: 41 14 of 20: 71 15 of 20: 98 16 of 20: 1239213 17 of 20: 9214134713 Cannot parse input as integer 17 of 20: 84379811 18 of 20: 12312 19 of 20: 245 20 of 20: 13 Calculating primes... primes: [2, 3, 5, 7, 11, 13, 13, 17, 41, 71]