Отсортировать массив при помощи Comparator

191
18 декабря 2018, 22:00

Само задание звучит так: Реализовать программу чтения из текстового файла целых положительных значений (числа разделены пробелами, следует читать до конца файла), занесение этих чисел в массив, сортировка по убыванию и по возрастанию суммы цифр и хранения обоих результатов в двух новых текстовых файлах. Перечисленные действия реализовать в отдельной статической функции. Для определения порядка сортировки создать классы, которые реализуют интерфейс Comparator.

Я реализовала чтение из файла, занесение в массив, сортировку по возрастанию, но вот я не могу понять, как для определения порядка сортировки создать классы, которые реализуют интерфейс Comparator. Насколько я понимаю,сортировку по убыванию надо тоже как-то через Comparator.

package com.company;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void funk()throws FileNotFoundException{
    String path = 
"C:\\Users\\Ira\\Desktop\\PROGRAMMS\\JAVA\\1\\2\\out\\zfr.txt";
    File file = new File(path);
    Scanner scanner = new Scanner(file);
    String line = scanner.nextLine();
    String[] numbersString = line.split(" ");
    int[] numbers = new int[numbersString.length];
    int[] numberss = new int[numbersString.length];
    int counter = 0;
    for (String number : numbersString) {
        numbers[counter++] = Integer.parseInt(number);
    }
    System.out.println(Arrays.toString(numbers));
    scanner.close();
    System.out.print("[");
    for (int j=0;j<numbers.length;j++){
        int sum=0;
        while(numbers[j] != 0){
            sum += (numbers[j] % 10);
            numbers[j]/=10;
        }
        numberss[j]=sum;
        System.out.print(numberss[j] + " ");
    }
    System.out.println("]");
    java.util.Arrays.sort (numberss);
    System.out.print("[");
    for (int j=0;j<numbers.length;j++) {
        System.out.print(numberss[j] + " ");
    }
    System.out.println("]");
}
public static void main(String[] args) throws FileNotFoundException {
    funk();
}
}
Answer 1

Необходимо создать два класса, реализовать в них интерфейс Comparator, если у целочисленный значения в массиве типа Integer, то можно сразу типизировать Comparator.

class Test implements Comparator<Integer>

далее в этом же классе реализуем метод compare(). Если сразу типизировать интерфейс, как я выше написал, то метод уже сам подставит нужный тип.

а в методе уже реализовать сортировку, например return o2 - o1; отсортирует по убыванию, о1 - о2 отсортирует по возрастанию.

static class Test implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;
    }
}

Далее в главном классе уже можно использовать классы-компораторы У метода Arrays.sort есть конструктор, подаем массив данных и класс-компоратор.

Arrays.sort(test, new Test());
READ ALSO
Почему Intellij IDEA не находит ConnectionManager?

Почему Intellij IDEA не находит ConnectionManager?

intellij idea не предлагает мне достать из пакета Util > ConnectionManager, чтобы потом преобразовать в

162
Firebase database не принимает данные

Firebase database не принимает данные

Проверьте: - в консоли Firebase - DataBase что вы работаете с Realtime Database, а не Cloud Databese; - проверьте в Realtime Database правила чтения и записи, что бы без ограничений...

169
Не могу выбрать один элемент из postgreSQL

Не могу выбрать один элемент из postgreSQL

Выборка всех элементов методом getAll() работает, а выборка методом get() нетДаже напрямую указываю строку, толку нет

189
SendFile Telegram Bot Java

SendFile Telegram Bot Java

Нужно написать бота, который по команде дает ссылку на скачивание файла с ПКК примеру у меня в файл пишутся логи, нужно чтобы в Telegram при команде...

154