这个java Number列表有什么问题?

时间:2011-12-02 18:35:38

标签: java list numbers

我有以下列表。列表是我使用的其他类所必需的。

List<Number> series, series2

系列充满了120个值,现在我尝试将每个第二个值变为series2 tha为空

for (int num = 1; num < 121; num = num + 2) {
    series2.add(num, series.get(num));
}

为什么会崩溃?

4 个答案:

答案 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。