我是一个新手,知道我可能会以一种完全错误的方式来解决这个问题。当用户选择给定的月份和年份时,我试图用一个月中所有星期一的日期填充转盘。为此,我使用了两个循环,第一个循环计算一个月中有多少个循环(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);

最佳答案

在第二个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);
...

07-24 15:36