From cd586dbad495816f9829109d6e9bd22341fd786a Mon Sep 17 00:00:00 2001 From: mzernova Date: Thu, 19 Dec 2019 08:53:26 +0300 Subject: [PATCH] Performed task --- .../rd/online/service/SimpleMathService.java | 245 ++++++++++++------ 1 file changed, 161 insertions(+), 84 deletions(-) diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleMathService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleMathService.java index 2921576..033cecc 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleMathService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleMathService.java @@ -2,108 +2,185 @@ public class SimpleMathService implements MathService { - /** - * Метод возвращает 0, если value1 = value2. - * Метод возвращает -1, если value1 < value2. - * Метод возвращает 1, если value1 > value2. - * - * Например для (-1, -1) метод должен вернуть 0; - * Например для (-3, -1) метод должен вернуть -1; - * Например для (3, 1) метод должен вернуть 1; - */ - @Override - public int compare(int value1, int value2) { - return -2; + /** + * Метод возвращает 0, если value1 = value2. Метод возвращает -1, если value1 < value2. Метод + * возвращает 1, если value1 > value2. + *

+ * Например для (-1, -1) метод должен вернуть 0; Например для (-3, -1) метод должен вернуть -1; + * Например для (3, 1) метод должен вернуть 1; + */ + @Override + public int compare(int value1, int value2) { + return Integer.compare(value1, value2); + } + + /** + * Метод возвращает максимальное число из пары. Например для списка (-1, 2) метод должен вернуть + * 2 + */ + @Override + public int maxFrom(int value1, int value2) { + return Math.max(value1, value2); + } + + /** + * Метод возвращает максимальное число из переданного массива. Например для списка {-1, -3, 4, 8, + * 5, 22, -5} метод должен вернуть 22 + */ + @Override + public int maxFrom(int[] values) { + int max = values[0]; + + for (int num : values) { + if (num > max) { + max = num; + } } - /** - * Метод возвращает максимальное число из пары. - * Например для списка (-1, 2) метод должен вернуть 2 - */ - @Override - public int maxFrom(int value1, int value2) { - return -1; + return max; + } + + /** + * Метод возвращает сумму чисел массива. Например для списка {-1, -3, 4, 8, 5, 22, -5} метод + * должен вернуть 30 + */ + @Override + public int sum(int[] values) { + int sum = 0; + + for (int num : values) { + sum += num; } - /** - * Метод возвращает максимальное число из переданного массива. - * Например для списка {-1, -3, 4, 8, 5, 22, -5} метод должен вернуть 22 - */ - @Override - public int maxFrom(int[] values) { - return -1; + return sum; + } + + /** + * Метод фильтрует массив, оставляя только четные числа. Например для списка {-1, -3, 4, 8, 5, 22, + * 17} метод должен вернуть {4, 8, 22} + */ + @Override + public int[] getEvenDigits(int[] values) { + int size = 0; + for (int num : values) { + if (num % 2 == 0) { + size++; + } + } + + int[] result = new int[size]; + int index = 0; + for (int num : values) { + if (num % 2 == 0) { + result[index++] = num; + } } - /** - * Метод возвращает сумму чисел массива. - * Например для списка {-1, -3, 4, 8, 5, 22, -5} метод должен вернуть 30 - */ - @Override - public int sum(int[] values) { - return -1; + return result; + } + + /** + * Метод считает факториал из заданного числа. Например для числа 5 метод должен вернуть 120. + * Факториал 0 должен быть равен 1. + */ + @Override + public long calcFactorial(int initialVal) { + if (initialVal == 0) { + return 1; } - /** - * Метод фильтрует массив, оставляя только четные числа. - * Например для списка {-1, -3, 4, 8, 5, 22, 17} метод должен вернуть {4, 8, 22} - */ - @Override - public int[] getEvenDigits(int[] values) { - return new int[]{}; + long factorial = 1; + for (int num = 1; num <= initialVal; num++) { + factorial *= num; } - /** - * Метод считает факториал из заданного числа. - * Например для числа 5 метод должен вернуть 120. - * Факториал 0 должен быть равен 1. - */ - @Override - public long calcFactorial(int initialVal) { - return -1L; + return factorial; + } + + /** + * Метод возвращает число, которе находится на заданной позиции (счет начинается с нуля) в ряду + * фибоначчи. + *

+ * Ряд фибоначчи - ряд, следующие элементы которого состоят из суммы двух предыдущих. Ряд + * начинается 0 и 1. Пример 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ... + *

+ * Для числа 9 метод должен вернуть 34 Для числа 0 метод должен вернуть 0 + */ + @Override + public long calcFibonacci(int number) { + long firstNum = 0; + long secondNum = 1; + + for (int val = 0; val < number; val++) { + long temp = secondNum; + secondNum += firstNum; + firstNum = temp; } - /** - * Метод возвращает число, которе находится на заданной позиции (счет начинается с нуля) в ряду фибоначчи. - * - * Ряд фибоначчи - ряд, следующие элементы которого состоят из суммы двух предыдущих. - * Ряд начинается 0 и 1. - * Пример 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ... - * - * Для числа 9 метод должен вернуть 34 - * Для числа 0 метод должен вернуть 0 - */ - @Override - public long calcFibonacci(int number) { - return -1L; + return firstNum; + } + + /** + * Метод возвращает отсортированный по возрастанию массив. Например для массива {-1, -3, 4, 8, 5, + * 22, -5} метод должен вернуть {-5, -3, -1, 4, 5, 8, 22} + */ + @Override + public int[] sort(int[] values) { + if (values.length == 0) { + return new int[]{}; } - /** - * Метод возвращает отсортированный по возрастанию массив. - * Например для массива {-1, -3, 4, 8, 5, 22, -5} метод должен вернуть {-5, -3, -1, 4, 5, 8, 22} - */ - @Override - public int[] sort(int[] values) { - return new int[]{}; + int length = values.length; + int[] array = values.clone(); + + for (int i = 0; i < length - 1; i++) { + for (int j = 0; j < length - i - 1; j++) { + if (array[j] > array[j + 1]) { + int temp = array[j]; + array[j] = array[j + 1]; + array[j + 1] = temp; + } + } } - /** - * Метод определяет, является ли заданное число простым. - * Простое число - число, которое делится только на 1 и на само себя. - * - * Например для числа 22 вернется false, а для числа 23 true. - */ - @Override - public boolean isPrimary(int number) { + return array; + } + + /** + * Метод определяет, является ли заданное число простым. Простое число - число, которое делится + * только на 1 и на само себя. + *

+ * Например для числа 22 вернется false, а для числа 23 true. + */ + @Override + public boolean isPrimary(int number) { + for (int i = 2; i < number / 2 + 1; i++) { + if (number % i == 0) { return false; + } } + return true; + } - /** - * Метод возвращает массив, в котором элементы расположены в обратном порядке. - * - * Например для массива {-1, -3, 4, 8, 5, 22, -5} метод вернет {-5, 22, 5, 8, 4, -3, -1} - */ - @Override - public int[] reverseArray(int[] values) { - return new int[]{}; + /** + * Метод возвращает массив, в котором элементы расположены в обратном порядке. + *

+ * Например для массива {-1, -3, 4, 8, 5, 22, -5} метод вернет {-5, 22, 5, 8, 4, -3, -1} + */ + @Override + public int[] reverseArray(int[] values) { + if (values.length == 0) { + return new int[]{}; } + + int length = values.length - 1; + int[] array = new int[length + 1]; + + for (int i = 0; i < length / 2 + 1; i++) { + array[i] = values[length - i]; + array[length - i] = values[i]; + } + + return array; + } }