我试图使用以下代码从包含[9,0,0,6,2,3,0,0,0]的ArrayList中删除一个
static void appendRow(ArrayList<ArrayList<Integer>> ans) {
int ind = 0;
while(yolo.size() < 81) {
for(int x = 0; x < ans.size(); x++) {
ArrayList<Integer> an = ans.get(x);
for(int i = ind; i < ind+3; i++) {
yolo.add(an.get(i));
}
for(int y = 0; y < 3; y++) {
an.remove(y);
}
}
ind+=3;
}
System.out.println(yolo);
}
这里发生的事情是,我从ans添加前3个int后,我将删除它们。有多个项目将被传递到appendRow函数,但我只需要前三个,下一个函数只需要其余的(即[6,2,3,0,0,0])。
问题是,当y = 2时,an.remove(y)不会删除索引为2的0,而是删除2,因此列表变为[0,6,3,0,0,0],这是完全错误的。
答案 0 :(得分:2)
反转for
循环的方向。变化
for (int y = 0; y < 3; y++) {
an.remove(y);
}
类似
for (int y = 2; y >= 0; y--) {
an.remove(y);
}
或类似
for (int y = 0; y < 3; y++) {
an.remove(0);
}
因为当您删除第一个元素时,第二个元素现在是第三个元素。那就是9, 0, 0, 6, 2, 3, 0, 0, 0
变为0, 0, 6, 2, 3, 0, 0, 0
然后0, 6, 2, 3, 0, 0, 0
,然后是您报告的0, 6, 3, 0, 0, 0
(这正是您告诉它要做的)。