2个arraylist的总和?

时间:2016-09-11 12:57:57

标签: java arraylist

运行代码时出现以下错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
    at java.util.LinkedList.checkPositionIndex(Unknown Source)
    at java.util.LinkedList.addAll(Unknown Source)
    at Collection.Dynamycmaasiv.Collecktionaddlist.main(Collecktionaddlist.java:36)

public static void main(String[] args) {
    LinkedList<Integer> num = new LinkedList<Integer>();
    LinkedList<Integer> numodd = new LinkedList<Integer>();
    LinkedList<Integer> numeven = new LinkedList<Integer>();
    LinkedList<Integer> sumoffevenandodd = new LinkedList<Integer>();// help
                                                                        // me
                                                                        // to
                                                                        // solve

    for (double i = 0; i < 50; i++) {
        num.add((int) i);
        if (i % 2 == 0) {
            numeven.add((int) i);
        } else {
            numodd.add((int) i);

        }
    }

    System.out.println(num);
    System.out.println("-----------------");
    System.out.println(numodd);
    System.out.println("-----------------");
    System.out.println(numeven);

    for (int i =0; i<numeven.size(); i++){

        sumoffevenandodd.addAll(numeven.get(i)+ numodd.get(i), null);
    }

    System.out.println(sumoffevenandodd);
}

}

2 个答案:

答案 0 :(得分:2)

addAll()添加数字无关。它是关于将方法参数的所有元素添加到集合本身。

所以,你需要循环,比如

int sum = 0;
for (Integer numberFromList : numeven) {
  sum = sum + numberFromList;

或者,如果你有Java8,你可以使用流:

int sumEven = numeven.stream().sum();

总结,完成。

为了记录:这里要学到的真正教训是:阅读 javadoc 。不要认为名为 addAll()的方法会执行假设的方法。转到javadoc并告诉自己现实对您的假设的看法。

但是要明确;因为我对你的问题也不屑一顾。

在您的代码中,如果您更改

sumoffevenandodd.addAll(numeven.get(i)+ numodd.get(i), null);

sumoffevenandodd.add(numeven.get(i)+ numodd.get(i));

它也应该有效。

长话短说:如果你打算真的有一个包含50个总和的列表,那么我的第一段并没有真正帮助解决你的问题。 但目前还不清楚你想做什么;所以我将答案保留原样 - 解决逻辑中“错误”的可能解释。

答案 1 :(得分:1)

如果问题的意图是

num odd

[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45, 47,49]

num even

[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44, 46,48]

奇数和偶数之和

[1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89, 93,97]

然后

for(int i = 0; i&lt; numeven.size(); i ++){

        sumoffevenandodd.add(numeven.get(i)+ numodd.get(i));
    }