迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

解决 Java Lang Index Out of Bounds Exception 异常

作者:迹忆客 最近更新:2023/07/12 浏览次数:

本篇文章我们将讨论考虑数组和 ArrayList 的 IndexOutOfBoundsException 错误。 我们还将了解导致此错误的原因以及最后如何解决它。


java.lang.IndexOutOfBoundsException 的原因

Arrays 和 ArrayList 中出现 IndexOutOfBoundsException 错误的原因是相似的,除了一个区别是错误描述不同。 我们在 Arrays 和 ArrayList 中收到此错误,分别为 java.lang.ArrayIndexOutOfBoundsExceptionjava.lang.IndexOutOfBoundsException

造成该异常的原因如下:

  1. 当 ArrayList 为空时,尝试访问第一个索引处的值,即 0。
  2. 当我们尝试访问 Array 或 ArrayList 中负索引处的项目时。
  3. 当我们尝试访问 Array 或 ArrayList 的无效索引时,该索引可以是负数、等于或大于 Array 或 ArrayList 的大小。

请记住,IndexOutOfBoundsException 是一个运行时异常,Java 编译器在编译时不会检测到它。 所以,有必要知道如何访问Array或ArrayList。

经验法则是,在访问 Array 或 ArrayList 之前必须对其进行填充。 此外,我们只能访问满足以下条件的索引:0 <= index < (Array/ArrayList size)。

让我们借助代码示例来学习它。


考虑 ArrayList 的 java.lang.IndexOutOfBoundsException 解决方案

示例代码:

import java.util.ArrayList;

public class TestArrayList{

    public static void main(String[] args){
        ArrayList<String> list = new ArrayList<>();
        //we try to get value at index 0 which is
        //empty right now
        System.out.println(list.get(0));
        list.add("Mehvish"); //saves at index 0
        list.add("Ashiq"); //saves at index 1
   }

}

上面的代码导致 IndexOutOfBoundsException 错误,因为我们正在访问尚未填充的索引 0。

要解决此错误,我们必须首先在 ArrayList 中添加项目,然后通过确保没有访问无效索引来访问它们。 在下面的代码中,我们已经处理了所有可能导致IndexOutOfBoundsException的情况。

示例代码:

import java.util.ArrayList;

public class TestArrayList{
    //create array list object of String type
    static ArrayList<String> list = new ArrayList<>();

    //populate array list
    static void populateList(){
        list.add("Mehvish"); //saves at index 0
        list.add("Ashiq"); //saves at index 1
    }
    /*
    Access the index only if the index
    is valid and the list is not empty. Otherwise, print
    the message to inform the user
    */
    static void getElement(int index){
        if(list.size() != 0 && index >= 0 && index < list.size()){
            System.out.println(list.get(index));
        }else{
            System.out.println("The list is empty or you have entered an invalid index");

        }

    }
    //main method
    public static void main(String[] args){
        populateList();
        getElement(0);
    }

}

让我们在各种输入上测试此代码。

测试 1:用户将 0 传递给 getElement() 函数,输出将是,

Mehvish

测试 2:用户将 1 传递给 getElement() 函数,输出将如下所示:

Ashiq

测试 3:用户将 2 传递给 getElement() 函数,输出将是,

The list is empty or you have entered an invalid index

测试4:用户将-1传递给 getElement() 函数,输出如下,

The list is empty or you have entered an invalid index

测试 5:用户对 populateList() 函数进行注释并传递有效索引。 输出如下所示,

The list is empty or you have entered an invalid index

考虑数组的 java.lang.ArrayIndexOutOfBoundsException 的解决方案

示例代码:

public class TestArray{

    public static void main(String[] args)
    {
        int array[] = {1,2,3,4,5} ;
        for (int i = 0; i <= array.length; i++)
            System.out.println(array[i]);
    }

}

此代码示例由于尝试访问无效的索引 5 而导致 ArrayIndexOfBoundsException。 请记住,我们无法访问无效索引。

我们来测试一下下面的代码,它处理了所有可能的情况并避免了 ArrayIndexOutOfBoundsException 错误。

示例代码:

import java.util.ArrayList;

public class TestArray{
    //required size of an array
    static int size = 2;
    //declare an int type array of specified size
    static int array[] = new int[size];

    //populate array
    static void populateArray(){
        for (int i = 0; i < size; i++)
            array[i] = i+1;
    }

    //get element if a valid index is passed
    static void getElement(int index){
        if(array.length != 0 && index >= 0 && index < array.length){
            System.out.println(array[index]);
        }else{
           System.out.println("The array is empty or you have entered an invalid index");
        }
    }

    //main method
    public static void main(String[] args){
        populateArray();
        getElement(1);
    }
}

让我们在不同的用户输入上测试此代码。

测试 1:用户将 0 传递给 getElement() 函数,输出将是,

1

测试 2:用户将 1 传递给 getElement() 函数,输出将如下所示:

2

测试 3:用户将 2 传递给 getElement() 函数,输出将是,

The array is empty or you have entered an invalid index

测试4:用户将 -1 传递给 getElement() 函数,输出如下,

The array is empty or you have entered an invalid index

测试 5:用户对 populateArray() 函数进行注释并传递有效索引。 输出如下所示,

0

为什么是0? 这是因为我们初始化了一个空数组,其中 0 是 int 类型的默认值。 如果我们不初始化元素,则数值数组元素的默认值将设置为 0,而引用元素将设置为 null。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便