java.lang.ArrayIndexOutOfBoundsException при сортировке массива

1

Я - абсолютный новичок в Java. Недавно я начал писать код в Java, чтобы отсортировать 5 элементов массива. Пользователь вводит элементы массива. Он соответствует коду и запускает программу. но как только я закончу ввод элементов массива, программа выйдет из строя! Вот мой код:

import java.util.Scanner;
public class Main
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        int[] arr;
        arr = new int[5];
        System.out.println("Enter the 5 elemnts in the array");
        for(int i=0; i<5; i++)
            arr[i] = in.nextInt();
        int temp;
        for(int i=0; i<5; i++)
        {
            temp = arr[i+1];
            for(int j=i+1; j>=0; j--)
            {
                if(arr[i] > temp)
                {
                    arr[j] = temp;
                    arr[i] = arr[j];
                }
            }
        }       
    }
}

он выдает ошибку, которая выглядит примерно так: Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 5 at Main.main(Main.java:16) Я просто не могу прочитать и понять ошибку!

  • 5
    Вы смотрели документацию для ArrayIndexOutOfBoundsException ? Я предлагаю вам сделать это и прочитать учебник по массивам . Затем подумайте о значении i+1 для всех значений i которые вы будете использовать ...
  • 1
    Спасибо, я нашел это полезным :)
Показать ещё 2 комментария
Теги:
exception

2 ответа

4
Лучший ответ

Вот ошибка:

for(int i=0; i<5; i++) {
    temp = arr[i+1];
    //         ^^^
    //   Right here!
    ...
}

когда i равно 4, i+1 равно 5, которое находится за концом массива.

Такая ошибка настолько распространена, что у нее есть свое имя: она называется Off By One Error. Когда вы видите ArrayIndexOutOfBoundsException в цикле, первое, что вы ищете, это такая ошибка.

  • 0
    Спасибо за выявление ошибки для меня :)
2

Ваш массив имеет длину 5, индексы начинаются с 0. Это означает, что ваш максимальный индекс равен 4, но вы пытаетесь получить доступ к вашему массиву с индексом 5 в вашем цикле for:

 temp = arr[i+1];

Ещё вопросы

Сообщество Overcoder
Наверх
Меню