数组列表错误

Array List Error

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

        }

    }

}
}

搜索和删除功能不起作用。我每次都收到错误信息:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:653) at java.util.ArrayList.get(ArrayList.java:429) at lec06.AddressBook.Search(AddressBook.java:29) at lec06.Lec06.main(Lec06.java:33)

显然您的列表是空的(您是否使用了 AddPerson() 函数?)。

在您的 for-loop 中,您有以下条件:i <= aList.size()。因此,即使 aList 大小等于 0(列表为空),您也会尝试从该列表 (get(i)) 中获取一个元素。这就是你得到异常的原因。

您应该将 i <= aList.size() 更改为 i < aList.size() 以解决此问题。

假设其他一切都没有问题,请更改 for 循环中的条件。你写了 -

for (int i = 0; i <= aList.size(); i++) {

}  

将其更改为 -

for (int i = 0; i < aList.size(); i++) {

}  

您在尝试访问索引 aList.size 处的元素时收到 ArrayIndexOutOfBoutnd 异常。因为 aList.get(aList.size).
处没有元素 Array/ArrayList 索引从 0 开始并在 array.size-1 结束。

为了遍历 add/remove 函数中的列表,将终止条件更改为 <,严格小于:

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

A​​rray、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++)