获取所有素数

时间:2018-09-22 17:27:10

标签: java

我目前有此代码,但是当我输入一个数字(例如20)时,它返回-1,为什么会发生这种情况?谢谢

public static ArrayList<Integer> prime(int num){

    ArrayList<Integer> primes = new ArrayList<>();
    ArrayList<Integer> nul = new ArrayList<Integer>();
    nul.add(-1);

        for(int i = 1; i < num; i++) {
            for(int j = 2; j < i - 1; j++){
                if (i % j == 0) {
                    return nul;
                }
                primes.add(i);
            }
        }
    return primes;
}

1 个答案:

答案 0 :(得分:0)

您之所以得到-1是因为您返回nul的时间是您的情况是否达到true的那一刻。在这种情况下,您应该使用continue,在这里它可以解决您的问题,但是会创建另一个问题,即在此处使用它会导致您的列表中出现重复的条目。

因此,建议您使用boolean flag变量和break来获得所需的结果。下面是一个代码片段,其中添加了注释以供解释

public static ArrayList<Integer> prime(int num){
    ArrayList<Integer> primes = new ArrayList<>();
    ArrayList<Integer> nul = new ArrayList<Integer>();
    nul.add(-1);
        boolean flag=true;
        for(int i = 1; i < num; i++) {
            flag=true;
            for(int j = 2; j < i; j++){
                if (i % j == 0) {
                    flag=false;  // set it to false, if number is not prime
                    break;
                }
            }
            if(flag) {           // If flag was true till this point
                primes.add(i);   // means it is current number is prime. so add it to list
            }
        }
    return primes;
}