problem deleting elements in arraylist

Refresh

December 2018

Views

487 time

1

I'm doing a simple program using arraylist. But I've encountered an error. After deleting an element in the arraylist, using this code:

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

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

I'm having problems with adding another record after a delete. From what I see, the index, where I'm storing the next element is greater than the size, since I deleted an item.

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);

I get this error:

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

Please help,

4 answers

0

Как я вижу, вы Ctr получаете увеличились после того, как каждый раз, когда вы вставляете элемент. но не получить снижалось после удаления. Так, в следующий раз, когда вы идете, чтобы добавить элемент в эти списки индекс представляет СУУ не существует в списке. Это является причиной для Вас, чтобы получить IndexOutOfBoundException.

При использовании ctr-- в удалении, как «Дакмен» сказал, решает существующую проблему. Но «Будет ли» подход "s упрощает код. Как Бритва Osccam предполагают, я хотел бы пойти с ответом «Will A» 's

2

Вы должны просто использовать , add(object)а не add(index, object)- тогда вы не будете иметь проблемы вы encoutered выше.

4

Как насчет

 ctr--;

на удаление?

1

В вашем случае не требуется, чтобы поддерживать индекс при добавлении в ArrayList. Я думаю, что в вашем случае вам потребуется как вы сохраняете студент информации в multipple ArrayList, как имя в NEM ArrayList, конечно, в corz ArrayList ... и т.д.. А затем использовать его для corelation. Я думаю, что это не очень хороший дизайн.

Хороший дизайн был бы создать объект 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);

Надеюсь, что это полезно.

YoK