ProblemThe array filled up, and you got an ArrayIndexOutOfBoundsException . SolutionMake the array bigger. DiscussionOne approach is to allocate the array at a reasonable size to begin with, but if you find yourself with more data than will fit, reallocate a new, bigger array and copy the elements into it.[1] Here is code that does so:
import java.util.Calendar; /** Re-allocate an array, bigger... */ public class Array2 { public static void main(String argv[]) { int nDates = 0; final int MAX = 10; Calendar[] dates = new Calendar[MAX]; Calendar c; while ((c=getDate( )) != null) { // if (nDates >= dates.length) { // System.err.println("Too Many Dates! Simplify your life!!"); // System.exit(1); // wimp out // } // better: reallocate, making data structure dynamic if (nDates >= dates.length) { Calendar[] tmp = new Calendar[dates.length + 10]; System.arraycopy(dates, 0, tmp, 0, dates.length); dates = tmp; // copies the array reference // old array will be garbage collected soon... } dates[nDates++] = c; } System.out.println("Array size = " + dates.length); } static int n; /* Dummy method to return a sequence of 21 Calendar references, * so the array should be sized >= 21. */ public static Calendar getDate( ) { if (n++ > 21) return null; return Calendar.getInstance( ); } } This technique works reasonably well for simple linear collections of data. For data with a more variable structure, you probably want to use a more dynamic approach, as in Recipe 7.3. |