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

Mac*_*ein -8 java numbers list

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

List<Number> series, series2
Run Code Online (Sandbox Code Playgroud)

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

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

为什么会崩溃?

cor*_*iKa 5

没有更多的代码,我无法肯定地说,但很可能你永远不会做series2 = new LinkedList<Number>或类似的东西.

我看到的另一个问题是你从1开始.List接口实现通常是0索引,所以你想要

for(int num = 0; num < series.size(); num += 2)
Run Code Online (Sandbox Code Playgroud)

您最好的选择是提供整个代码(编译和重现问题所需的代码)以及您在错误上获得的堆栈跟踪.

编辑:

它还取决于您对输出的要求.让我们假装你的系列输入是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);
}
Run Code Online (Sandbox Code Playgroud)

或者:

for(int num = 1; num < 120; num+=2) {
    series2.add(null);
    series2.add(series.get(num));
}
Run Code Online (Sandbox Code Playgroud)

无论如何,尝试添加如下:series2.add(num, series.get(num))可能会失败.根据文件List.add(int,E)

抛出

IndexOutOfBoundsException - 如果索引超出范围(索引<0 || index> size())

所以你只能用它来添加到中间List.如果要添加到最后,则必须使用List.add(E).如果要添加到List尚未包含的某个特定索引,则需要添加nulls(或其他内容),直到到达那里.如果您的List实现不支持nulls,显然这是一个问题.