Java 把所有的素数都加到一个点上

Java 把所有的素数都加到一个点上,java,Java,我现在有这个代码,但是当我输入一个数字,比如20,它返回-1,你知道为什么会发生这种情况吗?多谢各位 public static ArrayList<Integer> prime(int num){ ArrayList<Integer> primes = new ArrayList<>(); ArrayList<Integer> nul = new ArrayList<Integer>(); nul.add(-

我现在有这个代码,但是当我输入一个数字,比如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是因为你返回nul,如果条件变为真的话。在这种情况下,您应该使用continue,在这里它将解决您的问题,但创建另一个问题,即在这里使用它将导致您的列表中出现重复条目

所以,我建议您使用一个布尔标志变量和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;
}

你为什么返回nul;?因为你的代码逻辑是错误的。检查数字是否为素数的代码在哪里?我找不到一种方法来表示输入的数字没有素数,所以我创建了一个名为nul的数组,其中包含-1 lol im NEW请努力调试您自己的代码,因为Stackoverflow不是一个供您转储代码并为您解决问题的网站。有关此网站主题的问题种类,请参阅。