С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
4 / 2 / 2
Регистрация: 01.04.2022
Сообщений: 29

Сортировка массива с использованием компаратора

15.06.2022, 18:23. Показов 1217. Ответов 6

Студворк — интернет-сервис помощи студентам
Здравствуйте, сейчас пытаюсь разобраться с тем как именно работает компаратор, но что-то не понимаю.
Нужно сделать такое задание:


Отсортировать рядки двумерного массива с разными критериями с помощью sort() класа Arrays.
Использовать вариант метода параметрами которого является массив и компаратор(екземпляр класса, который реализует интерфейс Comparator).

Критерии сравнения задаются в методе compare, в который передаются два рядка массива. Если по критерию первый ряд больше второго - метод возвращает 1, меньше второго -1, ряды равны 0 .Критерии в компараторах разные, например сортировка:

По возростанию количества парных чисел в ряде.


Тема должно быть не сложная, но я ещё не понял до конца, буду рад если кто-то объяснит подробно и решит мой пример.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.06.2022, 18:23
Ответы с готовыми решениями:

Компаратора сортировка по убыванию
Подскажите, пожалуйста, как с помощью компаратора вывести учеников с их оценками по убыванию. package lab6_2; public interface...

Предусмотреть возможность изменения компаратора (реализация компаратора в виде передаваемой в подпрограмму функции)
**Реализовать сортировку данных с помощью "пузырькового" алгоритма. (Сделал) **Реализовать сортировку данных с помощью алгоритма слияния....

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

6
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
15.06.2022, 18:37
Цитата Сообщение от MjerVi Посмотреть сообщение
Критерии сравнения задаются в методе compare, в который передаются два рядка массива. Если по критерию первый ряд больше второго - метод возвращает 1, меньше второго -1, ряды равны 0 .Критерии в компараторах разные, например сортировка:
По возростанию количества парных чисел в ряде.
Ничего не понял, но очень интересно.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
15.06.2022, 18:58
Цитата Сообщение от MjerVi Посмотреть сообщение
Здравствуйте, сейчас пытаюсь разобраться с тем как именно работает компаратор, но что-то не понимаю.
int compare(T o1, T o2)
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
ты должен написать такой метод. В него передаются o1 и o2 - два массива - ряды твоей матрицы. Если o1 больше o2 - возвращаешь +1, если меньше -1, если равно 0.
0
4 / 2 / 2
Регистрация: 01.04.2022
Сообщений: 29
15.06.2022, 19:19  [ТС]
Arsegg, вот и мне бы хотелось попроще условие)
Ну типо нужен компаратор в который передаются две строки двумерного массива и сравнивается число чётных чисел в этих двух строках.
И потом используя метод Arrays.sort() выводится уже отсортированый массив соответсвующий данным критериям(сортировка по возрастанию количества чётных чисел)

Добавлено через 1 минуту
xoraxax, а не могли бы вы привести конкретный ко применимый для моего условия? Вот теорию я вроде как понял, но на практике такое себе. Хотелось бы разобрать код, который решит мою задачу.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
15.06.2022, 19:26
Цитата Сообщение от MjerVi Посмотреть сообщение
а не могли бы вы привести конкретный ко применимый для моего условия
а давай может ты его напишешь, за тебя неохота работать?
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
15.06.2022, 20:31
Лучший ответ Сообщение было отмечено MjerVi как решение

Решение

Цитата Сообщение от MjerVi Посмотреть сообщение
Ну типо нужен компаратор в который передаются две строки двумерного массива и сравнивается число чётных чисел в этих двух строках.
Не благодари:
Java
1
2
3
4
5
final ToLongFunction<int[]> tlf = row -> Arrays.stream(row).filter(x -> x % 2 == 0).count();
final Comparator<int[]> comparator = Comparator.comparingLong(tlf);
final int[][] a = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Arrays.sort(a, comparator);
System.out.println(Arrays.deepToString(a));
1
4 / 2 / 2
Регистрация: 01.04.2022
Сообщений: 29
15.06.2022, 22:10  [ТС]
Arsegg, да, спасибо всё работает. А вы не знаете способ ещё попроще, а то например 1-я строка не под силу моим знаниям в библиотеках java. Сейчас тогда попробую как-то через циклы может упростить)

Добавлено через 1 минуту
xoraxax, Да, извините, не было возможности тогда кинуть, но мой код неправильно работает, так как я что-то запутался.


Вот полный код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.Arrays;
import java.util.Comparator;
 
public class Task10 {
public static void main(String[] args) {
    
    int[][] arr= new int[4][4];
    for(int i=0; i<arr.length; i++) {
        for(int j=0; j<arr[i].length; j++)
            arr[i][j]=(int)(Math.random()*10);
    }
    
    System.out.println(Arrays.deepToString(a));
    
    class OddComparator implements Comparator<int[]>{
 
        @Override
        public int compare(int[] arr1, int[] arr2) {
            int res1=0, res2=0;
            for(int i=0; i<arr1.length; i++) {
                if(arr1[i]%2==0) res1+=1;
                if(arr2[i]%2==0) res2+=1;   
            }
                return res1-res2;   
        }   
    }
    
    
    Arrays.sort(arr, new OddComparator());
    System.out.println(Arrays.deepToString(a));
    
    
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.06.2022, 22:10
Помогаю со студенческими работами здесь

Сортировка массива с использованием указателей
Помогите, пожалуйста... Составить программу сортировки массива строк с использованием указателей char str; //массив строк char *sp;...

Сортировка массива с использованием рекурсии
Нужно отсортировать массив в диапазоне от a до b с помощью рекурсии, что я делаю не так? #include&lt;iostream&gt; #include&lt;ctime&gt;...

Сортировка массива с использованием указателей.
Доброго времени суток, господа и дамы. Есть у меня следующая программа: TYPE RealPtr = ^REAL; FUNCTION MaxArray(p: RealPtr;...

Сортировка массива с использованием классов
Решил попробовать написать массив с помощью классов, но вот только ничего не получается. Подскажите, пожалуйста. Вот код сортировки...

Сортировка массива с использованием цикла while
Нужно написать этот же код программы при помощи 1) while; 2) do ... while. #include &lt;iostream&gt; #include &lt;algorithm&gt; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru