java对象复制,数组索引超出范围

java对象复制,数组索引超出范围,java,vector,copy,Java,Vector,Copy,我有一个课程表 公共课程表{ 公共INTP; 公共INTK; 向量r; 公共时间表(int p,int k){ 这个,P=P; 这个。K=K; r=新向量(5*P); 对于(int i=0;i

我有一个课程表

公共课程表{
公共INTP;
公共INTK;
向量r;
公共时间表(int p,int k){
这个,P=P;
这个。K=K;
r=新向量(5*P);
对于(int i=0;i<5*p;i++){
向量v=新向量();
r、 添加(v);
}
}
附表(附表s){
P=s.P;
K=s.K;
r=s.r;
}
公共ArrayList getsuccessivers(){
数组列表例程;
例程=新的ArrayList();
计划温度=新计划(本);
对于(int i=0;i

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

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


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

执行循环时,您正在移除阵列的元素。这总是一个坏主意,因为在删除元素后,索引的契约可能不再有效


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

与问题无关,但使用Vector是否有特殊原因?如果不需要线程安全的实现,建议改为使用ArrayList(),这与问题无关,但是使用Vector有什么特别的原因吗?如果不需要线程安全实现,建议使用ArrayList()
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;
}
}