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)
为什么会崩溃?
没有更多的代码,我无法肯定地说,但很可能你永远不会做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
尚未包含的某个特定索引,则需要添加null
s(或其他内容),直到到达那里.如果您的List
实现不支持null
s,显然这是一个问题.