indexOf导致java.lang.ArrayIndexOutOfBoundsException

时间:2014-04-15 01:04:36

标签: java android indexoutofboundsexception

当我想向用户添加参数时,我有一个存储在文件中的用户列表

ArrayList<User> list = loadListFromfile();
System.out.println("USER LIST: "+ list);

//the user to update
User oldUser = getCurrentUser();
System.out.println("CURRENT USER: "+ oldUser);

//update user receives an user and an update param and returns the updated user
User newUser = updateUser(oldUser, "updateparam");
System.out.println("NEW USER: "+ newUser);

//replace the old user with the new one
list.set(list.indexOf(oldUser), newUser);

所有打印都返回正确的值,但是当我调用

list.set(list.indexOf(oldUser), newUser);

该应用程序因此错误而崩溃

java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1

这真的很奇怪,我无法理解问题的原因,另外列表中只有2个项目(不是12个)。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

如果找不到oldUser,则indexOf(oldUser)返回-1。在这种情况下,set(-1)将抛出ArrayIndexOutOfBoundsException。

答案 1 :(得分:0)

您应该将oldUser添加到列表中。错误信息显示oldUser在列表中不存在。 请添加

list.add(oldUser);

答案 2 :(得分:0)

oldUser 未作为-1 ,但list中不存在。这就是它投掷ArrayIndexOutOfBoundsException的原因 根据代码System.out.println("CURRENT USER: "+ oldUser);,它不会打印-1。

<强>更新

 list.indexOf(oldUser) // Returning -1.

此处列表中oldUser的索引返回oldUser值存在的索引。您oldUser中不存在list的实际值,这就是它返回-1的原因。

list.set(-1, newUser);

当它尝试在-1位置设置任何内容时,它会抛出ArrayIndexOutOfBoundsException

答案 3 :(得分:0)

问题似乎是list.indexOf(oldUser)返回-1,实际上是一个超出范围的数组索引。你如何获得oldUser?我们可以在getCurrentUser()上找到代码吗?

此外,updateUser(oldUser, "updateparam")是否有可能搞砸列表?它应该工作是否返回指向新用户的指针或指向旧用户的指针(你在第一个参数中传递的指针),它是否可以修改oldUser参数指向的实际对象或不。

基本上我担心你可能会因列表which is called in the contains method of ArrayList中包含的每个e而面临oldUser.equals(e)的问题。但是没有代码就无法说出来。你可能会发现这个想法。