java对象复制,数组索引越界

赛夫伊斯兰教 |

我有一个班级“时间表”。

public class schedule {
    public int P;
    public int K;
    Vector<Vector<element>> r;

    public schedule(int p, int k) {
    this.P = p;
    this.K = k;
    r = new Vector<Vector<element>>(5 * P);
    for (int i = 0; i < 5 * p; i++) {
        Vector<element> v = new Vector<element>();
        r.add(v);
    }
}

schedule(schedule s){
    P = s.P;
    K = s.K;
    r = s.r;
}

public ArrayList<schedule> getSuccessors() {
    ArrayList<schedule> routine;
    routine = new ArrayList<schedule>();
    schedule temp= new schedule(this);

    for (int i = 0; i < r.size(); i++) {
        for (int j = 0; j < r.get(i).size(); j++) {
            for (int k = 1; k < r.size(); k++) {
                //System.out.println(r.elementAt(i).size());
                //System.out.println(r.elementAt(j).size());
                //System.out.println("credit "+ r.elementAt(i).elementAt(j).credit);
                if (!r.elementAt(k).contains(r.elementAt(i).elementAt(j))) {
                    temp.r = r;
                    temp.r.elementAt(k).add(r.elementAt(i).elementAt(j));
                    temp.r.get(i).remove(j);
                }
            }
        }
        routine.add(temp);
    }
    return routine;
}
}

每当执行代码时,我都会在 getSuccessors() 方法中收到 java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 错误消息。非常欢迎任何帮助。

彼得·威尔金

您在执行循环时正在删除数组的元素。这总是一个坏主意,因为在您删除元素后,您的索引合同可能不再有效。

如果你想在迭代时移除元素,你应该使用Iterator它的remove()方法。如果您在嵌套集合中,并且在内部集合中从外部集合中删除元素,请将其延迟到完成外部循环之后(通过使用break或设置toRemove标志和然后在完成内部循环后删除元素)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章