迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 连接 FTPS 服务器

发布时间:2023/07/14 浏览次数:76 分类:Java

安全文件传输协议 (FTPS) 是文件传输协议 (FTP) 的安全版本,它使用 SSL/TLS 加密来保护客户端和服务器之间传输的数据。 本文将介绍如何使用 Java 安全通道 (JSSE) API 连接到 Java 中的 FTPS 服务器。

使用 Java 创建 X.509 证书

发布时间:2023/07/14 浏览次数:107 分类:Java

X.509 是一种广泛使用的公钥基础设施 (PKI) 标准,用于保护和验证互联网上的交易。本文将教我们如何使用 Java 创建 X.509 证书。

Java 中错误 Unsupported Major Minor Version

发布时间:2023/07/14 浏览次数:68 分类:Java

出现 Unsupported Major.minor version 错误或 Java.lang.UnsupportedClassVersionError 的原因是运行时 JDK 较低,编译时 JDK 较高。 本篇文章介绍如何解决Java中不支持的major.minor版本。

Java 中 Could Not Find Java SE Runtime Environment 错误

发布时间:2023/07/14 浏览次数:149 分类:Java

当安装了运行时环境时,即 Java 找不到主 java.dll 文件时,可能会出现“Could not find Java SE Runtime Environment”错误。 本篇文章介绍如何解决 Java 中的“Could not find Java SE Runtime Environment”错误。

修复 Java 中无法打开 jvm.cfg 的问题

发布时间:2023/07/14 浏览次数:133 分类:Java

有时,我们认为一切都按预期进行,但有些问题却隐藏在幕后。 今天,我们将讨论类似的情况并确定可能的解决方案。Java 中的无法打开 jvm.cfg 错误 当我们将计算机更新到 Windows 10 但后来由于

修复 Java 中错误 Error: Else Without if

发布时间:2023/07/13 浏览次数:183 分类:Java

本篇文章我们将了解在用 Java 编写代码时只说 'else' without 'if' 的错误。 我们还将找出导致此错误的可能原因并找到解决方案。Java 中 error: 'else' without 'if'

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便