Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的数列素数枚举程序会返回意外值?_Java_Arrays_List_Debugging_Arraylist - Fatal编程技术网

Java 为什么我的数列素数枚举程序会返回意外值?

Java 为什么我的数列素数枚举程序会返回意外值?,java,arrays,list,debugging,arraylist,Java,Arrays,List,Debugging,Arraylist,给定一个从最小值到最大值的整数列表,我试图找到素数因子列表,这些素数因子均匀地乘以先前给定列表中的任何整数 例如,给定整数的输入列表[1…10],程序将输出[1,2,2,3,3,5,7]。此列表包含列表的主要因素,因为1*1=1,1*2=2,1*3=3,2*2=4,5*1=5,2*3=6,1*7=7,2*2=8,3*3=9,2*5=10 无论如何,为了做到这一点,我创建了一个方法(在Java中)来枚举从最小值到最大值的所有整数。从那里,我创建了一个方法来查找任何给定整数的素数因子。使用这个素数因

给定一个从最小值到最大值的整数列表,我试图找到素数因子列表,这些素数因子均匀地乘以先前给定列表中的任何整数

例如,给定整数的输入列表
[1…10]
,程序将输出
[1,2,2,3,3,5,7]
。此列表包含列表的主要因素,因为
1*1=1
1*2=2
1*3=3
2*2=4
5*1=5
2*3=6
1*7=7
2*2=8
3*3=9
2*5=10

无论如何,为了做到这一点,我创建了一个方法(在Java中)来枚举从最小值到最大值的所有整数。从那里,我创建了一个方法来查找任何给定整数的素数因子。使用这个素数因子方法,我编写了一个方法来遍历一个整数列表,保留这些整数所需的素数因子的运行列表,而不添加任何不在该列表中的额外项。例如,如果只需要2和8的素因子,它将找到8(2,2和2)的素因子和4(2和2)的素因子。然而,由于2和2已经在列表中,因为8的主要因素,它们不会被添加。当然,程序中还有其他助手方法可能存在bug,但这是它的主要结构

我在列表
[1…10]
上测试了这个程序,期望得到输出
[2,2,2,3,3,5,7]
,但得到的是输出
[3,3,7]
。似乎出于某种原因,当我取整数列表和运行列表中某个数字的素数因子的相对补码时,运行列表中的一些数字被删除了,但我不明白为什么

有人能找到这个bug并告诉我为什么会发生这种情况吗

代码:

import java.io.*;
导入java.util.*;
导入java.lang.Math;
班长{
公共静态void main(字符串[]args){
系统输出println(listPrimeFactors(maxToMin(1,10));
}
公共静态ArrayList PrimeFactors(ArrayList myList){
ArrayList myFactors=新的ArrayList();
对于(int j=0;j>>”+模板列表1);
返回模板1;
}
私有静态布尔inList(int n,ArrayList myList){
对于(int k=0;k=min;i--){
添加(i);
}
返回myList;
}
}

在没有迭代器的情况下循环列表时,不应从列表中删除项目,请参见此。 此外,您将继续使用临时列表(其中的元素已被删除),而不是运行列表

以下是这些更改的示例:

private static ArrayList<Integer> addDifference(ArrayList<Integer> list1, ArrayList<Integer> list2){
    ArrayList<Integer> tempList1 = new ArrayList<>(list1);
    for (Iterator<Integer> iterator = list2.iterator(); iterator.hasNext();) {
        Integer value = iterator.next();
        if (inList(value, tempList1)) {
            iterator.remove();
            tempList1.remove(value);
        }
    }

    for (int r = 0; r < list2.size(); r++){
        list1.add(list2.get(r));
    }

    System.out.println(list2 + " >>> " + list1);

    return list1;
}
私有静态ArrayList addDifference(ArrayList列表1、ArrayList列表2){
ArrayList tempList1=新的ArrayList(列表1);
for(Iterator Iterator=list2.Iterator();Iterator.hasNext();){
整数值=迭代器.next();
if(inList(值,templast1)){
iterator.remove();
模板1.删除(值);
}
}
对于(int r=0;r>>”+list1);
返回列表1;
}
private static ArrayList<Integer> addDifference(ArrayList<Integer> list1, ArrayList<Integer> list2){
    ArrayList<Integer> tempList1 = new ArrayList<>(list1);
    for (Iterator<Integer> iterator = list2.iterator(); iterator.hasNext();) {
        Integer value = iterator.next();
        if (inList(value, tempList1)) {
            iterator.remove();
            tempList1.remove(value);
        }
    }

    for (int r = 0; r < list2.size(); r++){
        list1.add(list2.get(r));
    }

    System.out.println(list2 + " >>> " + list1);

    return list1;
}