Java报错”IndexOutOfBoundsException”的原因以及解决办法

  • Post category:Java

Java报”IndexOutOfBoundsException”异常表示数组、集合或字符串等数据结构访问索引越界的异常。这个异常的原因是因为对于数组、集合或字符串等数据结构访问时,所使用的索引超出了允许的范围,比如负数、大于等于长度的数值,或集合为空等情况。

为了解决这个异常,我们需要找到访问数据结构的代码,并检查其代码中访问索引的范围,确保其在允许的范围之内。下面是两个示例说明:

示例一:访问数组时超出范围

int[] nums = {1, 2, 3};
int index = 3;
int result = nums[index]; // 这里会抛出 IndexOutOfBoundsException 异常

在上面的代码中,因为数组nums的长度为3,所以它的索引范围是从0到2。而当我们使用索引3时,会超出它的索引范围,所以会抛出IndexOutOfBoundsException异常。解决这个问题的办法是检查索引值是否正确,例如:

int[] nums = {1, 2, 3};
int index = 2;
if (index >= nums.length || index < 0) {
    // 处理索引越界
} else {
    int result = nums[index];
}

在上面的代码中,我们增加了一个对索引值的检查,确保它在合法的范围之内。

示例二:访问集合时集合为空

List<String> list = new ArrayList<>();
String str = list.get(0); // 这里会抛出 IndexOutOfBoundsException 异常

在上面的代码中,因为list是空集合,所以它的长度为0,当我们使用索引0来访问它的元素时,会超出它的索引范围,从而抛出IndexOutOfBoundsException异常。解决这个问题的办法是在访问元素之前,先进行集合的非空判断,例如:

List<String> list = new ArrayList<>();
if (!list.isEmpty()) {
    String str = list.get(0);
} else {
    // 处理空集合的情况
}

在上面的代码中,我们增加了一个对集合是否为空的判断,确保在集合非空的情况下才访问它的元素。