我有9个ArrayList
,我试图将它们全部压缩成一个给定点。
目前dotGrid
是ArrayList
s,searchX
和searchY
的矩阵,只需指定要添加到ArrayList
的{{1}}
neighbours
根据我的理解for(int searchX = sector[0] - 1; searchX < sector[0] + 2; searchX++){
for(int searchY = sector[1] - 1; searchY < sector[1] + 2; searchY++){
if(searchX >= 0 && searchX < 16 && searchY >= 0 && searchY < 16){
neighbours.add(dotGrid[searchX][searchY]);
}
}
}
应该有效,但事实并非如此。
我一直在努力寻找,但未能找到满意的答案。
提前致谢
答案 0 :(得分:2)
在
neighbours.add(dotGrid[searchX][searchY])
dotGrid
是一个数组。通常,您无法实例化完全限定泛型类型的数组:
List<Double>[][] dotGrid = new List<Double>[n][];
会因类型错误而失败,所以我假设部分输入了dotGrid
?
List[][] dotGrid;
这意味着addAll(dotGrid[searchX][searchY])
将失败,因为您尝试将List
的所有元素添加到List<Double>
。
理想情况下,您不会将对象数组与通用列表混合,而是将dotGrid
重新定义为列表列表:
List<List<List<Double>>> dotGrid;
如果这不起作用,您可以尝试@SuppressWarning("unchecked")
以确保dotGrid
在实例化后具有完全限定类型,或执行以下操作
@SuppressWarning("unchecked")
List<Double> cell = (List<Double>) dotGrid[searchX][searchY];
neighbours.addAll(cell);
答案 1 :(得分:0)
List#add
方法需要一个可以添加到List
的元素。因此,如果您的dotGrid
是ArrayList
s'的矩阵,则会尝试向ArrayList
添加List
,而不是添加List
的所有元素。您应该使用addAll
方法,而不是在答案中提到,但在代码中使用常规add
方法
neighbours.addAll(dotGrid[searchX][searchY]);
以下代码工作得很好,说明了addAll
方法
List<Integer> list = new ArrayList<Integer>( Arrays.asList( 0, 1 ) );
List<Integer> anotherList = new ArrayList<Integer>( );
anotherList.addAll( list );