Я - абсолютный новичок в 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) Я просто не могу прочитать и понять ошибку!
Вот ошибка:
for(int i=0; i<5; i++) {
temp = arr[i+1];
// ^^^
// Right here!
...
}
когда i
равно 4
, i+1
равно 5
, которое находится за концом массива.
Такая ошибка настолько распространена, что у нее есть свое имя: она называется Off By One Error. Когда вы видите ArrayIndexOutOfBoundsException
в цикле, первое, что вы ищете, это такая ошибка.
Ваш массив имеет длину 5, индексы начинаются с 0. Это означает, что ваш максимальный индекс равен 4, но вы пытаетесь получить доступ к вашему массиву с индексом 5 в вашем цикле for:
temp = arr[i+1];
ArrayIndexOutOfBoundsException
? Я предлагаю вам сделать это и прочитать учебник по массивам . Затем подумайте о значенииi+1
для всех значенийi
которые вы будете использовать ...