这个Java代码对这个问题正确吗? (无数组)

时间:2019-01-06 07:41:23

标签: java

问题是:

编写一个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);
    }
}
}  

这正确吗?

2 个答案:

答案 0 :(得分:1)

从我从阅读程序中可以看出来的是正确的:它执行了赋值操作而没有数组。

根据您课堂上的要求,可能会争辩说缺少输入验证。如果我输入-4,则您的程序将不会打印它(这可能被认为是正确的?),但是如果我输入3.14apple,它可能会崩溃。

有一些次要的问题,但是当您询问正确性时,答案是肯定的。

答案 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]