解决 Java Lang Index Out of Bounds Exception 异常
本篇文章我们将讨论考虑数组和 ArrayList 的 IndexOutOfBoundsException 错误。 我们还将了解导致此错误的原因以及最后如何解决它。
java.lang.IndexOutOfBoundsException 的原因
Arrays 和 ArrayList 中出现 IndexOutOfBoundsException 错误的原因是相似的,除了一个区别是错误描述不同。 我们在 Arrays 和 ArrayList 中收到此错误,分别为 java.lang.ArrayIndexOutOfBoundsException
和 java.lang.IndexOutOfBoundsException
。
造成该异常的原因如下:
- 当 ArrayList 为空时,尝试访问第一个索引处的值,即 0。
- 当我们尝试访问 Array 或 ArrayList 中负索引处的项目时。
- 当我们尝试访问 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。
相关文章
如何在 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 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,