使用索引从ArrayList <integer>中删除一个int,但将其视为对象java

时间:2015-12-08 02:43:58

标签: java arraylist

我试图使用以下代码从包含[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],这是完全错误的。

1 个答案:

答案 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(这正是您告诉它要做的)。