jsky
jsky

Reputation: 2217

Why is my array list size zero when i initialised it to 30?

Why is my array list size zero when i initialised it to 30?

I get java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 when addRecord() is called

(Note: calling setInitialValues from jsp doesnt help.)
(Note: ShootRecord also implements Serializable)

Servlet procesRequest method

        protected void processRequest(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

    PrintWriter pw = resp.getWriter();  
    String address = null;
    HttpSession session = req.getSession();

    ShootMeet meetBean = (ShootMeet)session.getAttribute("shootmeetbean");

    if(meetBean == null){
        pw.print("initialising meet \n");
        meetBean = new ShootMeet();
        meetBean.setInitialValues(30);
    }


    ShootRecord recordSent = (ShootRecord)session.getAttribute("shootrecordbean");
    if(recordSent == null){  
         recordSent = new ShootRecord();
    }

// **record sent created here**

try{            meetBean.addRecord(recordSent);
} ...
}
 // doGet and doPost call processRequest

ShootMeet

public class ShootMeet implements Serializable{

    private ArrayList<ShootRecord> listOfRecords;
    private String date;
    private int numTargets;

    public ShootMeet(){}

    public void setInitialValues(int numTarg){

        numTargets = numTarg;
        listOfRecords = new ArrayList<ShootRecord>(numTargets);


    }

    public void addRecord(ShootRecord s){

        if(listOfRecords.size() == 0){
        System.out.println("size of list of records is zero before adding record");
        }
        listOfRecords.add(s.targetNumber, s);

    }
    //...other setters/getters
}

index.jsp

    <%@page import="servlet.ShootRecord"%>
<%@page import="servlet.ShootRecordMap"%>

<%@ page contentType="text/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<%@page contentType="text/html" pageEncoding="UTF-8"%>
<jsp:useBean id="shootmeetbean" class="servlet.ShootMeet" scope = "session"/>
    <%--<jsp:setProperty name = "shootmeetbean" property = "initialValues" value = "1"/>
</jsp:useBean>--%>
<jsp:useBean id="shootrecordbean" class="servlet.ShootRecord" scope = "session"/>   


<html>
   // ... jstl tags
</html>

Upvotes: 0

Views: 237

Answers (2)

khan
khan

Reputation: 26

    Here 
    may be u r trying to add value in List at Index 1 when the u r Array List Size is Zero.

    listOfRecords.add(1, s);
    The above   statement will throw Exception if the listOfRecords.size()==0;
    So try to add values in List from Index 0;
    There is different between Capacity and Size.Capacity is the how many elements u can add in u r list and it gets incremented and size is the how many elements u r list currently poses.
So if the array list size is zero u cant start adding elements from Index 1. 

Upvotes: 0

jsky
jsky

Reputation: 2217

I was confusing list capacity with list size, and the functionality of arrays with that of ArrayLists.

more detailed answer

the size is the number of elements in the list; the capacity is how many elements the list can potentially accommodate without reallocating its internal structures. When you call new ArrayList(10), you are setting the list's initial capacity, not its size. In other words, when constructed in this manner, the array list starts its life empty.

Upvotes: 1

Related Questions