/*
В убывающем порядке
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int[] array = new int[20];
for (int i = 0; i < 20; i++) {
array[i] = Integer.parseInt(reader.readLine());
}
sort(array);
for (int x : array) {
System.out.println(x);
}
}
public static void sort(int[] array) {
//напишите тут ваш код
Integer[] arrayInteger = new Integer[array.length];
Arrays.sort(arrayInteger, Collections.reverseOrder()); // тут ругается
}
}
Ошибка:
Exception in thread "main" java.lang.NullPointerException
at java.util.Collections$ReverseComparator.compare(Collections.java:5117)
at java.util.Collections$ReverseComparator.compare(Collections.java:5108)
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
at java.util.TimSort.sort(TimSort.java:220)
at java.util.Arrays.sort(Arrays.java:1438)
at com.javarush.task.task07.task0728.Solution.sort(Solution.java:39)
at com.javarush.task.task07.task0728.Solution.main(Solution.java:20)Лера
17 уровень
Подскажите, пожалуйста, почему мой вариант сортировки в обратном порядке не работает и как это поправить?
Обсуждается
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Юрий
7 января 2019, 23:08
Ругается на пустой массив
В методе
передается ведь массив array, с ним и нужно работать
Можно отсортировать массив с помощью
и потом просто сделать реверс этого массива
+5
Rimma
15 января 2019, 10:14
Юрий не могли бы вы объяснить логику как делать реверс массива? Почему мы array.length делим на 2? Потом почему вычитаем 1и i? Очень хотелось бы понять.
0
Юрий
19 января 2019, 19:50
Здесь получается идет сужение от концов к центру, то есть при первом проходе меняются местами первый и последний элемент, при втором проходе: второй и предпоследний и так далее, при таком подходе нам нужно дойти до середины массива, поэтому делим на 2
От отнимаем единицу, потому что отсчет идет от нуля, если в массиве шесть элементов, то но первый элемент, это нулевой, соответственно шестой, это 5.
как то так.
Вы для лучшего понимания возьмите листке бумаги каждый шаг пропишите для небольшого массива, подставляя вместо i его значение, тогда станет все понятно.
как то так.
Вы для лучшего понимания возьмите листке бумаги каждый шаг пропишите для небольшого массива, подставляя вместо i его значение, тогда станет все понятно.
+4
Дмитрий СоснинExpert
7 января 2019, 22:08
А arrayInteger чем заполнен? Да и зачем он вообще нужен?
+1
Дмитрий СоснинExpert
7 января 2019, 22:39
тут проще пузырьком всё отсортировать
Ну или можно из array перенести всё в тот же arrayInteger, его отсортировать и все перенести обратно в array. Так тоже должно работать
+1