这段代码应该首先运行一个获取数字因子的代码,然后运行一个代码来检查数组中的数字并删除任何素数。
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/