Ошибка в сортировке массива Java

266
06 ноября 2017, 20:30

Привет, пишу сортировку масcива. Выдает ошибку тут:

n = arr[i]; 

Вот сам код:

public class Main {
    public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5};
        int n = 0;
        int i = 0;
        int a = 0;
        for(i = arr.length; i >= 0; i--){ // i = 4
            while(i>=0) { // i=>0
                a++; // 1, 2, 3 ,4
                for (i = i; i<=arr.length-a; i--){ // i<= 4, 3, 2 , 1, 0
                    n = arr[i]; //  n = 5
                    arr[i] = arr[i--]; // arr[4] = 4
                    arr[i--] = n; // arr[3] = 5
                }
            }
        }
        for(int s = 0; s<=arr.length; s++) {
            System.out.println(arr[s]); // 5 4 3 2 1
        }
    }

вот сама ошибка:

Quote: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5

понял что с индексом массива что-то не так. Так вроде последний элемент массива то есть в мое случае arr[4] = arr[arr.lenght], или это не так?

Answer 1

нет не так. arr.lenght вернет длину массива, если в массиве есть хотя бы 1 элемент, то его длинна 1 а не ноль.

Соответственно в вашем случае arr.lenght возвращает 5, а индексация массива от 0 до 4.

индекс 0, элемент # 1
индекс 1, элемент # 2
индекс 2, элемент # 3
индекс 3, элемент # 4
индекс 4, элемент # 5
максимальный индекс = 4, длина массива = 5.
Answer 2

Ошибка в циклах for(i = arr.length; i >= 0; i--) и for(int s = 0; s<=arr.length; s++) из-за размерности массива. arr.length - длинна массива, а нумерация в массиве начинается с 0. Правильный код: for(i = arr.length - 1; i >= 0; i--) и for(int s = 0; s < arr.length; s++)

READ ALSO
Перевод кода программы [требует правки]

Перевод кода программы [требует правки]

Помогите перевести из Java в C(не ++), пожалуйста

253
Android. Timer&#39;ы и ViewPager

Android. Timer'ы и ViewPager

В приложении нужно добиться того, чтобы была возможность листать "страницы", где на одной из них, выборочно, по нажатию кнопки запускался свой...

233
Activity + Fragment + Service + Moxy

Activity + Fragment + Service + Moxy

Вообщем есть приложение которое состоит из одного Activity и множества FragmentВ проекте используется MVP библиотека Moxy

265
При перемножении double вместо нулей пишется E

При перемножении double вместо нулей пишется E

Делаю небольшой калькулятор, и при тестировании заметил, что, например, при перемножении 5000 и 5000, получаю не 25000

253