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