在我的应用程序中我有这个数组:
private static String[] I_DAYS;
private static String[] I_MONTH = { "31", "31", "31", "31", "31", "31", "30", "30", "30", "30", "30", "29" };
通过以下代码,我可以将值设置为数组:
int currentDay = Integer.parseInt(SDate[0].substring(8, 10));
setDay(setRange(1, Integer.parseInt(I_MONTH[currentMonth])));
setCurrentDayValue(currentDay);
在第一次我没有问题,我想在这个数组中设置其他值,但在这个时间I_DAYS
数组长度可能是随机的,我想通过以下方式设置值:
int min = 1;
int max = 30;
if (currentValue <= 7) {
min = 1;
max = 29;
}
if (currentValue == 12) {
min = 1;
max = 28;
}
setDay(setRange(min, max));
不幸的是,当我尝试为此功能设置值时,我收到错误:
public void setDay(String[] day) {
I_DAYS = new String[day.length];
I_DAYS = day;
setDefaultValues(np_day, day);
}
private void setDefaultValues(NumberPicker picker, String[] values) {
picker.setMaxValue(values.length - 1);
picker.setMinValue(0);
picker.setDisplayedValues(values);
picker.setFocusable(true);
picker.setFocusableInTouchMode(true);
}
logcat的:
java.lang.ArrayIndexOutOfBoundsException:length = 29;指数= 29
当我尝试将currentValue设置为12
时,此错误原因答案 0 :(得分:0)
我无法看到你的其余代码,但在其中的某个地方,我猜你开始尝试使用1而不是0循环遍历数组。
在Java中,数组是零索引的。因此,大小为29的数组从0到28。访问索引29会导致ArrayIndexOutOfBoundsException异常。
事实上,重新查看代码,我可以看到错误。
它在这里
if (currentValue <= 7) {
min = 0;
max = 29;
}
应该是
if (currentValue <= 7) {
min = 0;
max = 28;
}
答案 1 :(得分:0)
这是正常的,您给I_DAYS
索引setDay(setRange(min, max));
,12
的情况是1到28,代表 29的长度,然后您尝试将其更改为1
(或任何小于7
的数字),这将尝试为其指定1到29的范围(需要长度为 30 ),所以你得到ArrayIndexOutOfBoundsException