数组查询,索引超出范围

时间:2011-06-20 19:31:07

标签: java android arrays

我是个新手,知道我可能会以完全错误的方式解决这个问题。当用户选择给定的月份和年份时,我正试图在一个月内用星期一的日期填充一个微调轮。要做到这一点,我使用两个循环,第一个计算月份中的数量,4或5,第二个填充第一个循环设置的长度x数组!这是乍一看的工作,但是当我将这个月向前移动4个月到10月时,我得到以下错误

java.lang.ArrayIndexOutOfBoundsException。

我会非常感激一些帮助,因为我认为有更好的方法。我的代码如下..........

int year1 = year.getCurrentItem();
    int month1 = month.getCurrentItem();
    int count = 0;

    Calendar cal = new GregorianCalendar(year1, month1, 1);

    do { 
        int day1 = cal.get(Calendar.DAY_OF_WEEK);
        if (day1 == Calendar.MONDAY) {
            count++;
        }
        cal.add(Calendar.DAY_OF_YEAR, 1);
    }  while (cal.get(Calendar.MONTH) == month1);

    int count2 = 0;

    recordArray = new String[count];

    Calendar cal2 = new GregorianCalendar(year1, month1, 1);

    do {   
        int day1 = cal2.get(Calendar.DAY_OF_WEEK);
        if (day1 == Calendar.SUNDAY) {
            recordArray[count2] = Integer.toString(cal2.get((Calendar.DAY_OF_MONTH))-1);
            count2++;
        }
        cal2.add(Calendar.DAY_OF_YEAR, 1);
    }  while (cal2.get(Calendar.MONTH) == month1);

2 个答案:

答案 0 :(得分:2)

你得到一个数组越界异常,因为有时一个月有4个星期一和5个星期日。

recordArray是星期一(4)的大小,和 你正在访问recordArray [count2],它可以是recordArray [5](越界)

根据你的描述,听起来你不是故意要检查星期日...所以答案是将星期日改为星期一

答案 1 :(得分:1)

第二次do{}while()if (day1 == Calendar.SUNDAY)更改为if (day1 == Calendar.MONDAY)

但我认为最好使用ArrayList之类的东西和除了两个之外的一个do-while循环。

...
ArrayList<String> recordArray = new ArrayList<String>();
do { 
        int day1 = cal.get(Calendar.DAY_OF_WEEK);
        if (day1 == Calendar.MONDAY) {
            recordArray.add(Integer.toString(cal2.get((Calendar.DAY_OF_MONTH))-1));
        }
        cal.add(Calendar.DAY_OF_YEAR, 1);
}  while (cal.get(Calendar.MONTH) == month1);
...