我有以下程序,我正在检查数组中每个数字的因子。我需要在hashmap中使用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;
}
}
我需要帮助的是在找到数字因子后将元素添加到arraylist。如果我们说数组(输入)有元素 - 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。我不知道如何解决它。请求某人请求帮助。
答案 0 :(得分: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;
答案 1 :(得分:1)
虽然我会以不同的方式处理,但如果你只是写
valuesOne = new ArrayList<Integer>();
在checkFactors()
方法的开头,您将获得所需的输出,而不会在当前代码中进行大量更改。