0

我有以下程序,我正在检查数组中每个数字的因子。我需要在哈希图中使用arraylist。

我有以下代码 -

public class ArrayExcercise {
private static Map<Integer, ArrayList<Integer>> mapOne = new TreeMap<Integer, ArrayList<Integer>>();
private static Map<Integer, ArrayList<Integer>> mapTwo = new TreeMap<Integer, ArrayList<Integer>>();
private static ArrayList<Integer> valuesOne = new ArrayList<Integer>();
private static ArrayList<Integer> valuesTwo = new ArrayList<Integer>();

public static void main(String[] args) {
    int[] randomArrayOne = RandomElementsInAnArray.generateRandomNumber(1,6);       
    System.out.println("The elements in the first array are: "+ Arrays.toString(randomArrayOne));       
    findFactors(randomArrayOne);        
}

static boolean flag = true;

public static boolean findFactors(int[] arrayOne) {         
    for (int i = 0; i < arrayOne.length; i++) {         
        checkFactors(arrayOne[i]);
    }       

    return false;
}

public static synchronized Map<Integer, ArrayList<Integer>> checkFactors(int num) {     
    for (int i = 2; i <= num; i++) {
        if ((num % i == 0)) {               
            valuesOne.add(i);                               
            mapOne.put(num, valuesOne);             
        }
    }       
    return mapOne;
}

}

我在这里需要帮助的是在找到数字的因子后将元素添加到数组列表中。如果假设数组(输入)有元素 - 2、4、6,并且我将这些数字中的每一个作为输入传递给方法 findFactors,我希望它显示如下 -

//我不包括 1,因为 1 是所有数字的因子。

2 - 2 
4 - 2,4
6 - 2,3,6

相反,我看到的输出如下 -

2 - 2,3,4,6
3 - 2,3,4,6
6 - 2,3,4,6

我知道这是我出错的地方 -

for (int i = 2; i <= num; i++) {
        if ((num % i == 0)) {               
            valuesOne.add(i);                               
            mapOne.put(num, valuesOne);             
        }
    }   

我将值附加到 arrayList,valuesOne。我不知道如何解决它。请人帮忙。

4

2 回答 2

3

valuesOne ArrayList每次调用checkFactors方法时都需要重新初始化。

valuesOne = new ArrayList<Integer>();
for (int i = 2; i <= num; i++) {
    if ((num % i == 0)) {               
        valuesOne.add(i);                               
        mapOne.put(num, valuesOne);             
    }
}       
return mapOne;
于 2013-05-15T18:39:27.243 回答
1

虽然我会以不同的方式处理这个问题,但如果你只是写

valuesOne = new ArrayList<Integer>();

在您的checkFactors()方法开始时,您将获得所需的输出,而无需对当前代码进行大量更改。

于 2013-05-15T18:41:18.557 回答