我是个新手,知道我可能会以完全错误的方式解决这个问题。当用户选择给定的月份和年份时,我正试图在一个月内用星期一的日期填充一个微调轮。要做到这一点,我使用两个循环,第一个计算月份中的数量,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);
答案 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);
...