Сортировка массива и печать в обратном порядке

Я хочу отсортировать свой массив так же, как я сделал это здесь:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int[] numbers = new int[3];

    System.out.println("Enter numbers: ");
    numbers[0] = sc.nextInt();
    numbers[1] = sc.nextInt();
    numbers[2] = sc.nextInt();

    System.out.println("Before: " + Arrays.toString(numbers));
    Arrays.sort(numbers);
    System.out.println("After: " + Arrays.toString(numbers));

}

Моя проблема в том, что теперь это должно быть полностью изменено. Поэтому он должен быть не восходящим, а нисходящим. Кто-нибудь может мне помочь?


person BRsmover    schedule 12.03.2014    source источник
comment
вам нужен массив, отсортированный и перевернутый, или отсортированный и просто напечатанный в обратном порядке в соответствии с заголовком вашего вопроса?   -  person guido    schedule 12.03.2014


Ответы (3)


Если вы можете изменить int[] на Integer[], вы можете использовать перегруженную версию Arrays.sort() и передать Comparator, возвращенный Collections.reverseOrder() в качестве второго аргумента:

Arrays.sort(numbers, Collections.reverseOrder());

Обратите внимание, что это не будет работать с примитивным массивом int[].

person Rohit Jain    schedule 12.03.2014
comment
^ Здесь было сказано хорошее замечание, вам придется изменить int[] на Integer[] , но это не изменит содержимое вашего массива. - person Fares K. A.; 12.03.2014
comment
@ФаресА. Что вы имеете в виду под последней частью вашего комментария? - person Rohit Jain; 12.03.2014
comment
int[] и Integer[] не будут иметь значения для его программы. - person Fares K. A.; 12.03.2014
comment
@ФаресА. Перегруженный Arrays.sort() не будет работать с примитивными массивами. - person Rohit Jain; 12.03.2014
comment
Я имел в виду для всего, кроме этого, это не повлияет на остальную часть программы. - person Fares K. A.; 13.03.2014

Вы можете использовать библиотеку Collections, в которой действительно полезные методы, включая .reverseOrder(). В основном это работает так:

Integer[] yourReversedArray = Arrays.sort(yourArrayHere, Collections.reverseOrder());

person Fares K. A.    schedule 12.03.2014
comment
Arrays.sort() выполняет сортировку на месте. - person Rohit Jain; 12.03.2014

Вы можете просто изменить отсортированный массив:

for(int i = 0; i < numbers.length / 2; i++) 
{
    int temp = numbers[i];
    numbers[i] = numbers[numbers.length - i - 1];
    numbers[numbers.length - i - 1] = temp;
}

или с помощью apache Commons.Lang (http://commons.apache.org/proper/commons-lang /) :

ArrayUtils.reverse(int[] array)
person Pierre Rust    schedule 12.03.2014