Created
May 22, 2025 06:48
-
-
Save untainsYD/3d0966c133ec248ea61877eada723f5f to your computer and use it in GitHub Desktop.
Laboratory 5, Task 2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package lab5.sorting; | |
| import java.util.Comparator; | |
| /** | |
| * Компаратор для сортування цілих чисел за збільшенням суми їх цифр. | |
| * Якщо суми цифр однакові, сортування здійснюється за значенням самого числа. | |
| */ | |
| public class DigitSumComparator implements Comparator<Integer> { | |
| /** | |
| * Обчислює суму цифр числа | |
| * @param number число для обчислення суми цифр | |
| * @return сума цифр числа | |
| */ | |
| public static int calculateDigitSum(int number) { | |
| int sum = 0; | |
| int n = Math.abs(number); // Використовуємо абсолютне значення для від'ємних чисел | |
| while (n > 0) { | |
| sum += n % 10; | |
| n /= 10; | |
| } | |
| return sum; | |
| } | |
| /** | |
| * Порівнює два числа за сумою їх цифр (за збільшенням) | |
| * @param num1 перше число | |
| * @param num2 друге число | |
| * @return негативне значення, якщо num1 < num2; позитивне, якщо num1 > num2; 0, якщо рівні | |
| */ | |
| @Override | |
| public int compare(Integer num1, Integer num2) { | |
| int sum1 = calculateDigitSum(num1); | |
| int sum2 = calculateDigitSum(num2); | |
| // Спочатку порівнюємо за сумою цифр | |
| int result = Integer.compare(sum1, sum2); | |
| // Якщо суми цифр однакові, порівнюємо за значенням числа | |
| if (result == 0) { | |
| result = Integer.compare(num1, num2); | |
| } | |
| return result; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment