try 在Codecademy上查找此数组中的所有质数时,收到一个逻辑错误:

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 i = 0; i < nums.length; i++) {
      if ((nums[i] % 2 != 0 || nums[i] % 3 != 0 ) || nums[i] % 5 != 0) {
        primeNumbers.add(nums[i]);
        } else { continue; }}
            System.out.println(primeNumbers); }
  
public static void main(String[] args) {
  PrimeDirective pd = new PrimeDirective();
  int[] numbers = {6, 29, 28, 33, 11, 100, 101, 43, 89};
  pd.findPrime(numbers);
  }  
}

我认为如果这个数不能被2、3或5整除,那么它就是质数.相反,该方法将所有数组项添加到我在方法中初始化的新ArrayList中.

我想这是我的数学问题,但在我的脑海里,这一切都是完全有意义的.

推荐答案

代码中出现的逻辑错误是因为判断素数的条件不正确.您只需判断数字是否不能被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);
    }
}

Java相关问答推荐

我可以在regex中的字符类中放置断言吗?

将Nimbus设置为计算机上运行的所有Java应用程序的默认外观

解析Javadoc时链接的全限定类名

存根基类的受保护方法

在bash中将数组作为Java程序的参数传递

编译多个.Java文件并运行一个依赖于用户参数的文件

Spring Boot Maven包

如何确定springboot在将json字段转换为Dto时如何处理它?

内存中的H2修剪尾随空格

相同的Java SerializedLambda为implMethodKind返回不同的结果

如何使用Jackson将XML元素与值和属性一起封装

@Rollback @ Transmission在验收测试中不工作

声明MessageChannel Bean的首选方式

try 使用类来包含JSON响应

如何在运行docker的应用程序中获取指定的配置文件

";home/runner/work/中没有文件...匹配到[**/pom.xml];Maven项目的构建过程中出现错误

java21预览未命名的符号用于try-with-resources

java 11上出现DateTimeParseException,但java 8上没有

如何使用java区分以下结果

在数组列表中找到对象后,未从数组中删除对象