删除arraylist中的元素的问题

时间:2010-08-01 10:49:46

标签: java arraylist

我正在使用arraylist做一个简单的程序。但我遇到了一个错误。 删除arraylist中的元素后,使用以下代码:

delnum=scanz.nextLine();
intdelnum=Integer.parseInt(delnum);

nem.remove(intdelnum);
corz.remove(intdelnum);
skul.remove(intdelnum);
gen.remove(intdelnum);

我在删除后添加其他记录时遇到问题。从我看到的,我存储下一个元素的索引大于大小,因为我删除了一个项目。

do {
    System.out.println("Add Records");

    System.out.print("Name: ");
    nem.add(ctr, scanz.nextLine());

    System.out.print("Course: ");
    corz.add(ctr, scanz.nextLine());

    System.out.print("Gender: ");
    gen.add(ctr, scanz.nextLine());

    System.out.print("School: ");
    skul.add(ctr, scanz.nextLine());

    System.out.println("Another?\n1.Yes\n2.No");
    adds=scanz.nextLine();
    addagain=Integer.parseInt(adds);

    ctr++;
} while(addagain==1);

我收到此错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 3

请帮忙,

4 个答案:

答案 0 :(得分:4)

怎么样?
 ctr--;

关于删除?

答案 1 :(得分:2)

您应该使用add(object)而不是add(index, object) - 那么您就不会遇到上面遇到过的问题。

答案 2 :(得分:1)

在您的情况下,在ArrayList中添加时不需要维护索引。 我认为在你的情况下你需要它,因为你将学生信息保存在多重ArrayList中,比如nem arraylist中的名字,corz arraylist等等。然后你用它来进行核心化。我认为这不是很好的设计。

好的设计就是创建带有名称,课程,地址等详细信息的Student对象,然后将Student对象添加到Arraylist。

public class Student {
    private String name;
    private String course;
    private String gender;
    private String school;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCourse() {
        return course;
    }
    public void setCourse(String course) {
        this.course = course;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getSchool() {
        return school;
    }
    public void setSchool(String school) {
        this.school = school;
    }

}

然后您的代码将更改为:

    do {
        Student student = new Student();
        System.out.println("Add Records");

        System.out.print("Name: ");
        student.setName(scanz.nextLine());

        System.out.print("Course: ");
        student.setCourse(scanz.nextLine());

        System.out.print("Gender: ");
        student.setGender(scanz.nextLine());

        System.out.print("School: ");
        student.setSchool(scanz.nextLine());

        // Add student to students ArrayList
        students.add(student);

        System.out.println("Another?\n1.Yes\n2.No");
        adds = scanz.nextLine();
        addagain = Integer.parseInt(adds);
    } while (addagain == 1);

希望这有用。

答案 3 :(得分:0)

正如我所见,每次插入物品后,Ctr都会增加。但删除后不会减少。因此,下次当您向这些列表添加项目时,列表中不存在由ctr表示的索引。这就是你获得IndexOutOfBoundException的原因。

通过使用ctr--删除,正如“Duckman”所说,解决了你现有的问题。但“Will A”的方法简化了代码。正如Osccam的Razor建议我喜欢“Will A”的回答