Exception in thread main java lang arrayindexoutofboundsexception

Обработка исключения индекса массива Java вне границ?

Как правило, массив имеет фиксированный размер, и каждый элемент доступен с помощью индексов. Например, мы создали массив размером 9. Тогда допустимыми выражениями для доступа к элементам этого массива будут значения от [0] до [8] (длина-1).

Когда вы используете значение –ve или значение, которое больше или равно размеру массива, возникает исключение ArrayIndexOutOfBoundsException.

Например, если вы выполняете следующий код, он отображает элементы в массиве и просит указать индекс для выбора элемента. Поскольку размер массива равен 7, допустимый индекс будет от 0 до 6.

Пример

import java.util.Arrays; import java.util.Scanner; public class AIOBSample < public static void main(String args[]) < int[] myArray = ; System.out.println("Elements in the array are:: "); System.out.println(Arrays.toString(myArray)); Scanner sc = new Scanner(System.in); System.out.println("Enter the index of the required element ::"); int element = sc.nextInt(); System.out.println("Element in the given index is :: "+myArray[element]); > >

Но если вы наблюдаете приведенный ниже вывод, мы запросили элемент с индексом 9, поскольку он является недопустимым индексом, возникла ситуация ArrayIndexOutOfBoundsException и выполнение было прекращено.

Вывод

Elements in the array are:: [897, 56, 78, 90, 12, 123, 75] Enter the index of the required element :: 7 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 at AIOBSample.main(AIOBSample.java:12)

Вы можете обработать это исключение, используя try catch, как показано ниже.

import java.util.Arrays; import java.util.Scanner; public class AIOBSampleHandled < public static void main(String args[]) < int[] myArray = ; System.out.println("Elements in the array are:: "); System.out.println(Arrays.toString(myArray)); Scanner sc = new Scanner(System.in); System.out.println("Enter the index of the required element ::"); try < int element = sc.nextInt(); System.out.println("Element in the given index is :: "+myArray[element]); >catch(ArrayIndexOutOfBoundsException e) < System.out.println("The index you have entered is invalid"); System.out.println("Please enter an index number between 0 and 6"); >> >
Elements in the array are:: [897, 56, 78, 90, 12, 123, 75] Enter the index of the required element :: 7 The index you have entered is invalid Please enter an index number between 0 and 6

Средняя оценка 5 / 5. Количество голосов: 1

Читайте также:  Linear gradient color in html

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Видим, что вы не нашли ответ на свой вопрос.

Напишите комментарий, что можно добавить к статье, какой информации не хватает.

Источник

Java ArrayIndexOutOfBoundsException

announcement - icon

The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.

To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.

Connect your cluster and start monitoring your K8s costs right away:

We rely on other people’s code in our own work. Every day.

It might be the language you’re writing in, the framework you’re building on, or some esoteric piece of software that does one thing so well you never found the need to implement it yourself.

The problem is, of course, when things fall apart in production — debugging the implementation of a 3rd party library you have no intimate knowledge of is, to say the least, tricky.

Lightrun is a new kind of debugger.

It’s one geared specifically towards real-life production environments. Using Lightrun, you can drill down into running applications, including 3rd party dependencies, with real-time logs, snapshots, and metrics.

Learn more in this quick, 5-minute Lightrun tutorial:

announcement - icon

Slow MySQL query performance is all too common. Of course it is. A good way to go is, naturally, a dedicated profiler that actually understands the ins and outs of MySQL.

The Jet Profiler was built for MySQL only, so it can do things like real-time query performance, focus on most used tables or most frequent queries, quickly identify performance issues and basically help you optimize your queries.

Critically, it has very minimal impact on your server’s performance, with most of the profiling work done separately — so it needs no server changes, agents or separate services.

Basically, you install the desktop application, connect to your MySQL server, hit the record button, and you’ll have results within minutes:

announcement - icon

DbSchema is a super-flexible database designer, which can take you from designing the DB with your team all the way to safely deploying the schema.

The way it does all of that is by using a design model, a database-independent image of the schema, which can be shared in a team using GIT and compared or deployed on to any database.

And, of course, it can be heavily visual, allowing you to interact with the database using diagrams, visually compose queries, explore the data, generate random data, import data or build HTML5 database reports.

announcement - icon

The Kubernetes ecosystem is huge and quite complex, so it’s easy to forget about costs when trying out all of the exciting tools.

To avoid overspending on your Kubernetes cluster, definitely have a look at the free K8s cost monitoring tool from the automation platform CAST AI. You can view your costs in real time, allocate them, calculate burn rates for projects, spot anomalies or spikes, and get insightful reports you can share with your team.

Connect your cluster and start monitoring your K8s costs right away:

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

We’re looking for a new Java technical editor to help review new articles for the site.

1. Overview

In this tutorial, we’ll discuss ArrayIndexOutOfBoundsException in Java. We’ll understand why it occurs and how to avoid it.

2. When Does ArrayIndexOutOfBoundsException Occur?

As we know, in Java, an array is a static data structure, and we define its size at the time of creation.

We access the elements of an array using indices. Indexing in an array starts from zero and must never be greater than or equal to the size of the array.

In short, the rule of thumb is 0

ArrayIndexOutOfBoundsException occurs when we access an array, or a Collection, that is backed by an array with an invalid index. This means that the index is either less than zero or greater than or equal to the size of the array.

Additionally, bound checking happens at runtime. So, ArrayIndexOutOfBoundsException is a runtime exception. Therefore, we need to be extra careful when accessing the boundary elements of an array.

Let’s understand some of the common operations that lead to ArrayIndexOutOfBoundsException.

2.1. Accessing an Array

The most common mistake that may happen while accessing an array is forgetting about the upper and lower bounds.

The lower bound of an array is always 0, while the upper bound is one less than its length.

Accessing the array elements out of these bounds would throw an ArrayIndexOutOfBoundsException:

int[] numbers = new int[] ; int lastNumber = numbers[5];

Here, the size of the array is 5, which means the index will range from 0 to 4.

In this case, accessing the 5th index results in an ArrayIndexOutOfBoundsException:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5 at . 

Similarly, we get ArrayIndexOutOfBoundsException if we pass a value less than zero as an index to numbers.

2.2. Accessing a List Returned by Arrays.asList()

The static method Arrays.asList() returns a fixed-sized list that is backed by the specified array. Moreover, it acts as a bridge between array-based and collection-based APIs.

This returned List has methods to access its elements based on indices. Also, similar to an array, the indexing starts from zero and ranges to one less than its size.

If we try to access the elements of the List returned by Arrays.asList() beyond this range, we would get an ArrayIndexOutOfBoundsException:

List numbersList = Arrays.asList(1, 2, 3, 4, 5); int lastNumber = numbersList.get(5);

Here again, we are trying to get the last element of the List. The position of the last element is 5, but its index is 4 (size – 1). Hence, we get ArrayIndexOutOfBoundsException as below:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5 at java.base/java.util.Arrays$ArrayList.get(Arrays.java:4351) at . 

Similarly, if we pass a negative index, say -1, we will get a similar result.

2.3. Iterating in Loops

Sometimes, while iterating over an array in a for loop, we might put a wrong termination expression.

Instead of terminating the index at one less than the length of the array, we might end up iterating until its length:

int sum = 0; for (int i = 0; i

In the above termination expression, the loop variable i is being compared as less than or equal to the length of our existing array numbers. So, in the last iteration, the value of i will become 5.

Since index 5 is beyond the range of numbers, it will again lead to ArrayIndexOutOfBoundsException:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5 at com.baeldung.concatenate.IndexOutOfBoundExceptionExamples.main(IndexOutOfBoundExceptionExamples.java:22)

3. How to Avoid ArrayIndexOutOfBoundsException?

Let’s now understand some ways to avoid ArrayIndexOutOfBoundsException.

3.1. Remembering the Start Index

We must always remember that the array index starts at 0 in Java. So, the first element is always at index 0, while the last element is at index one less than the length of the array.

Remembering this rule will help us avoid ArrayIndexOutOfBoundsException most of the time.

3.2. Correctly Using the Operators in Loops

Incorrectly initializing the loop variable to index 1 may result in ArrayIndexOutOfBoundsException.

Similarly, the incorrect use of operators or >= in termination expressions of loops is a common reason for the occurrence of this exception.

We should correctly determine the use of these operators in loops.

3.3. Using Enhanced for Loop

If our application is running on Java 1.5 or a higher version, we should use an enhanced for loop statement that has been specifically developed to iterate over collections and arrays. Also, it makes our loops more succinct and easy to read.

Additionally, using the enhanced for loop helps us completely avoid the ArrayIndexOutOfBoundsException as it does not involve an index variable:

Here, we do not have to worry about indexing. The enhanced for loop picks up an element and assigns it to a loop variable, number, with each iteration. Thus, it completely avoids ArrayIndexOutOfBoundsException.

4. IndexOutOfBoundsException vs. ArrayIndexOutOfBoundsException

IndexOutOfBoundsException occurs when we try to access an index of some type (String, array, List, etc.) beyond its range. It’s a superclass of ArrayIndexOutOfBoundsException and StringIndexOutOfBoundsException.

Similar to ArrayIndexOutOfBoundsException, StringIndexOutOfBoundsException is thrown when we try to access a character of a String with an index beyond its length.

5. Conclusion

In this article, we explored ArrayIndexOutOfBoundsException, some examples for how it occurs, and some common techniques to avoid it.

As always, the source code for all of these examples is available over on GitHub.

announcement - icon

Slow MySQL query performance is all too common. Of course it is. A good way to go is, naturally, a dedicated profiler that actually understands the ins and outs of MySQL.

The Jet Profiler was built for MySQL only, so it can do things like real-time query performance, focus on most used tables or most frequent queries, quickly identify performance issues and basically help you optimize your queries.

Critically, it has very minimal impact on your server’s performance, with most of the profiling work done separately — so it needs no server changes, agents or separate services.

Basically, you install the desktop application, connect to your MySQL server, hit the record button, and you’ll have results within minutes:

Источник

Оцените статью