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

  • Post category:Java

IndexOutOfBoundsException是Java 中一个常见的异常类型,当你访问一个数组、字符串或集合的越界元素时,程序就会抛出该异常。例如:

int[] nums = {1, 2, 3};
System.out.println(nums[3]);

上述代码试图输出数组中的第4个元素,而数组中只有3个元素,因此会抛出IndexOutOfBoundsException异常。下面是该异常的解决方法:

  1. 检查索引

首先要检查你正在访问的索引是否越界。如果你正在访问一个数组,你可以尝试使用数组的长度属性进行检查。

if (index >= nums.length) {
   // 抛出异常或采取其他适当的措施
}

如果你正在使用集合或字符串,请使用其size()方法进行检查。

List<String> list = new ArrayList<>();
if (index >= list.size()) {
  // 抛出异常或采取其他适当的措施
}

String str = "Hello World";
if (index >=str.length()) {
  // 抛出异常或采取其他适当的措施
}
  1. 处理异常

如果检查后发现索引不在范围内,则需要处理IndexOutOfBoundsException异常。通常做法是抛出异常或者进行相应的错误处理。

try {
    int[] nums = {1, 2, 3};
    System.out.println(nums[3]);
} catch (IndexOutOfBoundsException e) {
    System.out.println("索引越界");
}

在这个示例中,当访问一个数组越界时,会抛出IndexOutOfBoundsException异常,我们可以在catch中捕获这个异常,并输出“索引越界”的提示信息。

另一个更复杂的示例是处理ArrayList中的越界异常。假设有如下代码:

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");

for (int i = 0; i < 5; i++) {
    try {
        System.out.println(list.get(i));
    } catch (IndexOutOfBoundsException e) {
        System.out.println("越界" + i);
    }
}

在这个示例中,我们向集合中添加了四个元素,然后尝试遍历5个元素。由于集合中只有4个元素,因此当i=4时,我们就会访问不存在的越界元素。如果不进行异常处理,则程序就会抛出IndexOutOfBoundsException异常导致程序崩溃。因此,我们利用try-catch块来捕获异常并进行对应的处理,最终输出“越界4”。