运行代码时出现以下错误:
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);
}
}
答案 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));
}