2014-08-28 4 views
1

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

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]; 
       } 
      } 
     }  
    } 
} 

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

+5

ли вы смотрите на документация для ['ArrayIndexOutOfBoundsException'] (http://docs.oracle.com/javase/8/docs/api/java/lang/ArrayIndexOutOfBoundsException.html)? Я предлагаю вам сделать это и прочитать учебное пособие [arrays tutorial] (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html). Затем подумайте о значении 'i + 1' для всех значений' i', которые вы будете использовать ... –

+1

Спасибо, я нашел его полезным :) – 2014-08-28 20:12:59

+1

Я бы тоже привык к чтению ошибки. Сначала это кажется подавляющим, но оно должно * точно указать, что вам нужно делать. Фраза 'Main.Java: 16' сообщает вам строку, в которой включена ошибка, и имя исключения' ArrayIndexOutOfBounds' сообщает вам, что число в массиве, к которому вы пытаетесь получить доступ, не существует. – Yann

ответ

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

Спасибо, что опознали ошибку для меня :) – 2014-08-28 20:14:37

2

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

temp = arr[i+1]; 
Смежные вопросы