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 29215765..7730cb34 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 @@ -1,19 +1,27 @@ package com.epam.izh.rd.online.service; +import java.util.Arrays; + 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; + if (value1 < value2) { + return -1; + } else if (value1 > value2) { + return 1; + } else { + return 0; + } } /** @@ -22,7 +30,12 @@ public int compare(int value1, int value2) { */ @Override public int maxFrom(int value1, int value2) { - return -1; + boolean max = value1 > value2; + if (max) { + return value1; + } else { + return value2; + } } /** @@ -31,16 +44,25 @@ public int maxFrom(int value1, int value2) { */ @Override public int maxFrom(int[] values) { - return -1; + int max = values[0]; + for (int i = 1; i < values.length; i++) { + max = Math.max(max, values[i]); + } + return max; } + /** * Метод возвращает сумму чисел массива. * Например для списка {-1, -3, 4, 8, 5, 22, -5} метод должен вернуть 30 */ @Override public int sum(int[] values) { - return -1; + int sum = 0; + for (int i = 0; i < values.length; i++) { + sum = sum + values[i]; + } + return sum; } /** @@ -49,7 +71,16 @@ public int sum(int[] values) { */ @Override public int[] getEvenDigits(int[] values) { - return new int[]{}; + int j = 0; + int[] even = new int[values.length]; + for (int i = 0; i < values.length; i++) { + if ((values[i] % 2 == 0) && (values[i] != 0)) { + even[j] = values[i]; + j++; + } + } + int[] copyEven = Arrays.copyOf(even, j); + return copyEven; } /** @@ -59,22 +90,40 @@ public int[] getEvenDigits(int[] values) { */ @Override public long calcFactorial(int initialVal) { - return -1L; + long fact = 1; + for (int i = 1; (i <= initialVal) && (initialVal != 0); i++) { + fact = fact * i; + } + return fact; } /** * Метод возвращает число, которе находится на заданной позиции (счет начинается с нуля) в ряду фибоначчи. - * + *
* Ряд фибоначчи - ряд, следующие элементы которого состоят из суммы двух предыдущих. * Ряд начинается 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; + long a = 0; + long b = 1; + long value = a + b; + if (number == 0 || number == 1) { + value = number; + } else if (number == 2) { + value = 1; + } else { + for (int i = 3; i <= number; i++) { + a = b; + b = value; + value = a + b; + } + } + return value; } /** @@ -83,27 +132,55 @@ public long calcFibonacci(int number) { */ @Override public int[] sort(int[] values) { - return new int[]{}; + for (int i = values.length - 1; i >= 0; i--) { + for (int j = 0; j < i; j++) { + if (values[j] > values[j + 1]) { + int temp = values[j]; + values[j] = values[j + 1]; + values[j + 1] = temp; + } + } + } + return values; } /** * Метод определяет, является ли заданное число простым. * Простое число - число, которое делится только на 1 и на само себя. - * + *
* Например для числа 22 вернется false, а для числа 23 true. */ @Override public boolean isPrimary(int number) { - return false; + if (number < 2) { + return false; + } + for (int i = 2; i < number; 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[]{}; + int left = 0; + int right = values.length - 1; + while (left < right) { + int temp = values[left]; + values[left] = values[right]; + values[right] = temp; + left++; + right--; + } + return values; } } + +