数组列表错误
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
。
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++)
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
。
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++)