数组中的Java设置值获取ArrayIndexOutOfBoundsException错误

时间:2015-02-22 10:23:13

标签: java android

在我的应用程序中我有这个数组:

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

时,此错误原因

2 个答案:

答案 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