我正在使用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
请帮忙,
答案 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”的回答