数组列表错误

时间:2015-05-17 16:23:40

标签: java arrays arraylist indexoutofboundsexception

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)

4 个答案:

答案 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++)