我有以下列表。列表是我使用的其他类所必需的。
List<Number> series, series2
系列充满了120个值,现在我尝试将每个第二个值变为series2 tha为空
for (int num = 1; num < 121; num = num + 2) {
series2.add(num, series.get(num));
}
为什么会崩溃?
答案 0 :(得分:5)
没有更多代码,我无法肯定地说,但很可能你永远不会制作series2 = new LinkedList<Number>
或类似的东西。
我看到的另一个问题是你从1开始。List
接口实现通常是0索引,所以你想要
for(int num = 0; num < series.size(); num += 2)
您最好的选择是提供整个代码(编译和重现问题所需的代码)以及您在错误中获得的堆栈跟踪。
编辑:
它还取决于您对输出的要求。让我们假装你的系列输入是0,1,2,3,4,5,6,7,8,9
,我们只处理10个数字。
你想要系列2:
null,1,null,3,null,5,null,7,null,9
1,null,3,null,5,null,7,null,9,null
1,3,5,7,9
如果它是前两个之一,那么你需要修改你的循环以添加额外的循环,如下所示:
for (int num = 0; num < 120; num++) {
series2.add(num % 2 == 1 ? series.get(num) : null);
}
或者:
for(int num = 1; num < 120; num+=2) {
series2.add(null);
series2.add(series.get(num));
}
无论如何尝试像这样添加:series2.add(num, series.get(num))
可能会失败。根据{{1}}
抛出
IndexOutOfBoundsException - 如果索引超出范围(索引&lt; 0 || index&gt; size())
因此,您只能使用它添加到List.add(int,E)
的中间位置。如果要添加到最后,则必须使用List
。如果要添加到List.add(E)
中尚未包含的某个特定索引,则需要添加List
s(或其他内容),直到达到目标为止。如果您的null
实施不支持List
s。
答案 1 :(得分:3)
你会得到一个IndexOutOfBoundsException
,因为你要在该列表的末尾添加一些东西到series2。试试吧
series2.add(series.get(num));
另外,请使用glowcoder的建议并用series.size()替换你的循环绑定;但是,你的循环实际上不会导致当前的IndexOutOfBoundsException
,因为传递条件的最后一个索引将是119 - 一个假设120个元素的有效索引。
答案 2 :(得分:1)
如果你告诉我们你得到的例外情况会更有帮助。
从你告诉我们的内容来看,我猜这是因为series2没有初始化。
答案 3 :(得分:1)
崩溃怎么样?可能是你引用的get(120)并不存在。元素将为0-119。