java.lang.IndexOutOfBoundsException:索引:0,大小:0使用ArrayList时

时间:2017-01-16 06:37:50

标签: java list exception arraylist

我试图存储所有这些元素,但我收到java.lang.IndexOutOfBoundsException: Index: 0, Size: 0这样的错误,而且我不确定我的错误是什么。

public List<AddUserInformation> insertData(AddUserDetail user) {
    List<AddUserInformation> inserted = null;
    try{
        List<AddUserInformation> addUserInformation = new ArrayList<AddUserInformation>() ;
        ArrayList accName = new ArrayList();

        for (int i = 0; i < user.getListofaccounts().toArray().length ; i++) {
            accName.add(user.getListofaccounts().get(i).getAccountName());                  
        }

        List<AddUserInformation> addUserInformation1 = new ArrayList<AddUserInformation>();
        for (int i = 0; i< accName.toArray().length; i++) {   
            addUserInformation1.get(i).setUserID(user.getUserId());
            addUserInformation1.get(i).setUsername(user.getUsername());
            addUserInformation1.get(i).setPassword(user.getPassword());
            addUserInformation1.get(i).setEmailid(user.getEmailid()); 
            List<AddUserAccountDetails> adduseraccountdetails = new ArrayList<>();
            addUserInformation1.get(i).setAccountName(user.getListofaccounts().get(i).getAccountName());
            addUserInformation1.get(i).setPermission_id(user.getListofaccounts().get(i).getPermission_id());
        }
        inserted = adduserInformationDao.saveAddUserInfo(addUserInformation1);

    } catch (Exception e) {
        LOGGER.error("Exception in adding of account to a user " + user.getUsername(), e);
    }
    return inserted;
}

事情是accName包含多少个帐户让我们说&#39; n&#39;作为列表,在第二个&#34; for&#34;最后循环以替换新值并显示最后的列表值。

2 个答案:

答案 0 :(得分:1)

声明:

List<AddUserInformation> addUserInformation1 = new ArrayList<AddUserInformation>();

创建新的空ArrayList ,因此当您在for循环中编写addUserInformation1.get(i) 时,您正尝试访问索引{{1}处的元素但是列表仍然是空的0处没有元素),所以你得到了例外。

在尝试使用0元素之前,您必须在列表中添加一些内容(例如,调用add(...)方法)。

答案 1 :(得分:0)

正如罗伯特所说,您正在尝试访问不存在的元素。

注意:List<AddUserAccountDetails> adduseraccountdetails = new ArrayList<>();永远不会被使用..

您可以创建类AddUserInformation的对象,然后将其添加到列表中,如下所示:

    public List<AddUserInformation>  insertData(AddUserDetail user) {
       List<AddUserInformation>  inserted = null;
        try{
            List<AddUserInformation> addUserInformation = new ArrayList<AddUserInformation>() ;
            ArrayList accName = new ArrayList();

            for( int i = 0; i < user.getListofaccounts().toArray().length ; i++ ) {
               accName.add(user.getListofaccounts().get(i).getAccountName());   
            }
            List<AddUserInformation> addUserInformation1 = new ArrayList<AddUserInformation>();
            for(int i = 0; i< accName.toArray().length; i++) {   
                AddUserInformation obj = new AddUserInformation ();
                obj.setUserID(user.getUserId());
                obj.setUsername(user.getUsername());
                obj.setPassword(user.getPassword());
                obj.setEmailid(user.getEmailid()); 
                obj.setAccountName(user.getListofaccounts().get(i).getAccountName());
                obj.setPermission_id(user.getListofaccounts().get(i).getPermission_id());
                addUserInformation1.add(obj);
                }
            inserted = adduserInformationDao.saveAddUserInfo(addUserInformation1);
          }catch (Exception e) {
        LOGGER.error("Exception in adding of account to a user " + user.getUsername(), e);
        }
        return inserted;
    }