代码中出现的逻辑错误是因为检查素数的条件不正确。你只是在检查这个数字是否不能被2、3或5整除,但这不足以确定一个数字是否为素数。例如,数字49不能被2、3或5整除,但它也不是素数,因为它可以被7整除。素数是一个只能被自身和1整除的数。所以,你需要检查这个数字是否可以被从2到其平方根的任何其他数字整除。如果是,那么它就不是素数。如果不是,那么它就是一个素数。
修复代码的一种方法是使用布尔变量来跟踪数字是否为素数,并使用
for
循环检查从2到数字平方根的所有可能除数。如果其中任何一个将数字除为无余数,则将布尔变量设置为false并中断循环。如果它们都没有,则将布尔变量设置为true,并将数字添加到
primeNumbers
列表以下是如何做到这一点的示例:
import java.util.Arrays;
import java.util.ArrayList;
class PrimeDirective {
// Add your methods here:
public void findPrime(int[] nums) {
ArrayList<Integer> primeNumbers = new ArrayList<Integer>();
for (int num : nums) {
boolean isPrime = true; // assume the number is prime
if (num == 2) { // special case for 2
isPrime = true;
}
else if (num > 2) { // check numbers greater than 2
for (int i = 2; i <= Math.sqrt(num); i++) { // loop from 2 to square root of num
if (num % i == 0) { // if num is divisible by i
isPrime = false; // set isPrime to false
break; // break out of the loop
}
}
}
else { // handle numbers less than or equal to 1
isPrime = false; // set isPrime to false
}
if (isPrime) { // if isPrime is true
primeNumbers.add(num); // add num to the list
}
}
System.out.println(primeNumbers); // print the list
}
public static void main(String[] args) {
PrimeDirective pd = new PrimeDirective();
int[] numbers = {6, 29, 28, 33, 11, 100, 101, 43, 89};
pd.findPrime(numbers);
}
}