目前我正在尝试编写一个代码,该代码将从各个点坐标创建一个列表,然后从列表中删除3个最小的int。当我运行应用程序时,它崩溃了。我发现我发生在删除部分。我已经研究过其他类似的线程,但解决方案与我的相似。这是我的代码:
List<Integer> XPoint = Arrays.asList(A.x, B.x, C.x, D.x, E.x, F.x, G.x, K.x);
List<Integer> XPLeft = Arrays.asList();
int XPLeftTimes = 0;
//Find 3 min X values(left)
while(XPLeftTimes != 2){
int Left = Collections.min(XPoint);
XPoint.remove(Left); <-App crashes here
XPLeft.add(Left);
XPLeftTimes++;
}
我做错了什么?提前谢谢。
答案 0 :(得分:2)
Arrays.asList()返回由指定数组支持的固定大小的列表。
试
List<Integer> xPoint = new ArrayList(Arrays.asList(A.x, B.x, C.x, D.x, E.x, F.x, G.x, K.x));
答案 1 :(得分:1)
当您调用XPoint.remove(left);
时,它不会删除该部分,它会删除索引中存储的任何值(等于左侧),这就是它崩溃的原因如果要删除它试试这个
XPoint.remove(new Integer(left));
答案 2 :(得分:0)
Arrays.asList()返回无法修改的固定大小数组。 如果你想修改它,你必须通过复制其内容创建一个新的可修改的Arraylist,如下所示:
List XPoint = new ArrayList(Arrays.asList(A.x, B.x, C.x, D.x, E.x, F.x, G.x, K.x));
列出XPLeft = new ArrayList();
这应该有用。