Reputation: 2217
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
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
Reputation: 2217
I was confusing list capacity with list size, and the functionality of arrays with that of ArrayLists.
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