java - 代码无法正确识别数组中的素数

标签 java

这段代码应该首先运行一个获取数字因子的代码,然后运行一个代码来检查数组中的数字并删除任何素数。

import java.util.*;
public class ArrayListFunHouse {
Scanner keyboard = new Scanner(System.in);
private static int input;
private int keepOnlyCompositeNumbersSize;
private static ArrayList<Integer> onlyCompositeNumbers = new ArrayList<Integer>();
private static ArrayList<Integer> getListOfFactors = new ArrayList<Integer>();
private static ArrayList<Integer> keepOnlyCompositeNumbers = new ArrayList<Integer>();
private static ArrayList<Integer> getListOfFactorsComposite = new ArrayList<Integer>();
public void setInput() {
    System.out.print("Please input the input you want to check the factors of :: ");
    input = keyboard.nextInt();
    System.out.print("Please enter the size of the array you wish to find the composite numbers in :: ");
    keepOnlyCompositeNumbersSize = keyboard.nextInt();
    for(int spot = 0; spot < keepOnlyCompositeNumbersSize; spot++) {
        keepOnlyCompositeNumbers.add(keyboard.nextInt());
    }
}
public static ArrayList<Integer> getListOfFactors() {
        for(int i = 1; i <= input; i++) {
        if(input % i == 0 && i!= 1 && i != input) {
            getListOfFactors.add(i);
        }
    }
    return getListOfFactors;
}
public static ArrayList<Integer> getListOfFactorsCompositeList(int number) {
    for(int i = 1; i <= number; i++) {
        if(number % i == 0 && i!= 1 && i != number) {
            getListOfFactorsComposite.add(i);
        }
    }
    return getListOfFactorsComposite;
}
public static ArrayList<Integer> keepOnlyCompositeNumbers() {
    for(int i = 0; i < keepOnlyCompositeNumbers.size();i++) {
        if(getListOfFactorsCompositeList(keepOnlyCompositeNumbers.get(i)).isEmpty() == false) {
            onlyCompositeNumbers.add(keepOnlyCompositeNumbers.get(i));
        }
    }
    return onlyCompositeNumbers;
}
public static void print() {
    System.out.println(getListOfFactors);
    System.out.println("Original list");
    System.out.println(keepOnlyCompositeNumbers);
    System.out.println("Composite List");
    System.out.println(onlyCompositeNumbers);
    }
}

这是运行者:

public class ArrayListFunHouseRunner {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    ArrayListFunHouse A = new ArrayListFunHouse();
    A.setInput();
    ArrayListFunHouse.getListOfFactors();
    ArrayListFunHouse.keepOnlyCompositeNumbers();
    ArrayListFunHouse.print();
}

}

输入:

Array Size: 15
Numbers: 2 6 8 9 10 12 13 15 17 24 55 66 78 77 79

预期输出为

[6, 8, 9, 10, 12, 15, 24, 55, 66, 78, 77]

实际输出是

[6, 8, 9, 10, 12, 13, 15, 17, 24, 55, 66, 78, 77, 79]

最佳答案

改变

public static ArrayList<Integer> getListOfFactorsCompositeList(int number) {
    for(int i = 1; i <= number; i++) {
        if(number % i == 0 && i!= 1 && i != number) {
            getListOfFactorsComposite.add(i);
        }
    }
    return getListOfFactorsComposite;
}

public static ArrayList<Integer> getListOfFactorsCompositeList(int number) {
    getListOfFactorsComposite = new ArrayList<Integer>();
    for(int i = 1; i <= number; i++) {
        if(number % i == 0 && i!= 1 && i != number) {
            getListOfFactorsComposite.add(i);
        }
    }
    return getListOfFactorsComposite;
}

基本上,你只需要添加一行 getListOfFactorsComposite = new ArrayList<Integer>();在方法的开头getListOfFactorsCompositeList

原因

您已声明getListOfFactorsComposite作为 List 的实例字段类型。因此,在方法调用之间,它保留了先前方法调用中添加的元素。需要添加此行以在新使用之前重置列表。

关于java - 代码无法正确识别数组中的素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42517513/

相关文章:

java - 四舍五入到最接近的 0.05 值的问题

Java:子类构造函数的 super() 如何/何时参与实例流?

java - Java 中引用子进程和父进程是否属于多态性?

java - 如何使用 Google Cloud EndPoints(java) 在 Android/IOS 应用程序中使用基本身份验证

java - 使用 JPA 的不同数据库的不同列类型

使用 IntelliJ 的 Java MDI 应用程序

java - Java 8 API 上是否有一个函数可以计算两个日期(包括两者)之间的天数?

java - 使用 ArrayList 而不是数组来避免使用普通的 for 循环

java - 使用 Java 读取远程 HDFS 文件

java - org.postgresql.util.PSQLException : The column index is out of range: 2, 列数:1