首页 > 解决方案 > 获取所有质数到一个点

问题描述

我目前有此代码,但是当我输入一个数字(例如 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;
}

标签: java

解决方案


你正在得到,-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;
}

推荐阅读