ArrayList aList = new ArrayList();
public void AddPerson() {
String n = JOptionPane.showInputDialog(null, "Please Enter Name");
String a = JOptionPane.showInputDialog(null, "Please Enter Name");
String p = JOptionPane.showInputDialog(null, "Please Enter Name");
PersonInfo person = new PersonInfo(n, a, p);
aList.add(person);
}
public void Search(String n) {
for (int i = 0; i <= aList.size(); i++) {
PersonInfo person = (PersonInfo) aList.get(i);
if (n.equals(person.name)) {
person.PrintInfo();
}
}
}
public void remove(String n) {
for (int i = 0; i <= aList.size(); i++) {
PersonInfo person = (PersonInfo) aList.get(i);
if (n.equals(person.name)) {
aList.remove(i);
}
}
}
}
搜索和删除功能不起作用。我每次都会收到错误消息:
线程中的异常“main”java.lang.IndexOutOfBoundsException:索引:0,大小:0,位于java.util.ArrayList.get的java.util.ArrayList.rangeCheck(ArrayList.java:653)中(ArrayList.java: 429)lec06.AddressBook.Search(AddressBook.java:29)在lec06.Lec06.main(Lec06.java:33)
答案 0 :(得分:3)
显然您的列表为空(您是否使用了AddPerson()
功能?)。
在您的for-loop
中,您有以下条件:i <= aList.size()
。因此,即使aList
大小等于0(列表为空),您也会尝试从该列表中获取一个元素(get(i)
)。这就是你得到例外的原因。
您应该将i <= aList.size()
更改为i < aList.size()
以解决此问题。
答案 1 :(得分:2)
假设所有其他事情都没问题,请更改for循环中的条件。你写了 -
for (int i = 0; i <= aList.size(); i++) {
}
将其更改为 -
for (int i = 0; i < aList.size(); i++) {
}
当您尝试访问索引ArrayIndexOutOfBoutnd
处的元素时,您收到aList.size
异常。因为aList.get(aList.size)
没有元素
Array / ArrayList索引从0
开始,以array.size-1
结束。
答案 2 :(得分:2)
要在添加/删除功能中迭代列表,请将终止条件更改为<
,严格小于:
public void Search(String n) {
for (int i = 0; i <= aList.size(); i++) {
并且:
public void remove(String n) {
for (int i = 0; i <= aList.size(); i++) {
这是迭代列表的常用方法。考虑到jave中的列表(和数组)是零索引,因此第一个元素位于索引0,最后一个元素位于索引size() - 1
。因此,当您迭代到<= size()
时,超出列表的长度,并生成您看到的IndexOutOfBoundsException
。
答案 3 :(得分:2)
Array,ArrayList,List从表单索引0开始。
因此,如果上述任何一个的大小为5,则其项目的索引为0到4.
您在这里尝试的是,您正在尝试访问大小索引,这意味着,如果数组列表的大小为5,则您尝试访问索引5,for (int i = 0; i <= aList.size(); i++)
不存在。最后一个索引应为-1。这是一个ArrayIndexOutOfBound情况。
正确的代码是:
for (int i = 0; i < aList.size(); i++)