当我想向用户添加参数时,我有一个存储在文件中的用户列表
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个)。
我该如何解决这个问题?
答案 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)的问题。但是没有代码就无法说出来。你可能会发现这个想法。