11package com .epam .izh .rd .online .service ;
22
3+ import java .math .BigInteger ;
4+ import java .util .Arrays ;
5+
36public class SimpleMathService implements MathService {
47
58 /**
69 * Метод возвращает 0, если value1 = value2.
710 * Метод возвращает -1, если value1 < value2.
811 * Метод возвращает 1, если value1 > value2.
9- *
12+ * <p>
1013 * Например для (-1, -1) метод должен вернуть 0;
1114 * Например для (-3, -1) метод должен вернуть -1;
1215 * Например для (3, 1) метод должен вернуть 1;
1316 */
1417 @ Override
1518 public int compare (int value1 , int value2 ) {
16- return -2 ;
19+ Integer value = value1 ;
20+ return value .compareTo (value2 );
1721 }
1822
1923 /**
@@ -22,7 +26,7 @@ public int compare(int value1, int value2) {
2226 */
2327 @ Override
2428 public int maxFrom (int value1 , int value2 ) {
25- return - 1 ;
29+ return Math . max ( value1 , value2 ) ;
2630 }
2731
2832 /**
@@ -31,7 +35,13 @@ public int maxFrom(int value1, int value2) {
3135 */
3236 @ Override
3337 public int maxFrom (int [] values ) {
34- return -1 ;
38+ int max = values [0 ];
39+
40+ for (int value : values ) {
41+ max = maxFrom (max , value );
42+ }
43+
44+ return max ;
3545 }
3646
3747 /**
@@ -40,16 +50,31 @@ public int maxFrom(int[] values) {
4050 */
4151 @ Override
4252 public int sum (int [] values ) {
43- return -1 ;
53+ int result = 0 ;
54+ for (int value : values ) {
55+ result += value ;
56+ }
57+ return result ;
4458 }
4559
4660 /**
4761 * Метод фильтрует массив, оставляя только четные числа.
4862 * Например для списка {-1, -3, 4, 8, 5, 22, 17} метод должен вернуть {4, 8, 22}
63+ *
64+ * @return
4965 */
5066 @ Override
5167 public int [] getEvenDigits (int [] values ) {
52- return new int []{};
68+ int [] evenDigitsList = new int [0 ];
69+
70+ for (int value : values ) {
71+ if (value % 2 == 0 ) {
72+ evenDigitsList = Arrays .copyOf (evenDigitsList , evenDigitsList .length + 1 );
73+ evenDigitsList [evenDigitsList .length - 1 ] = value ;
74+ }
75+ }
76+
77+ return evenDigitsList ;
5378 }
5479
5580 /**
@@ -59,22 +84,36 @@ public int[] getEvenDigits(int[] values) {
5984 */
6085 @ Override
6186 public long calcFactorial (int initialVal ) {
62- return -1L ;
87+ int result = 1 ;
88+ for (int i = 1 ; i <= initialVal ; i ++) {
89+ result *= i ;
90+ }
91+ return result ;
6392 }
6493
6594 /**
6695 * Метод возвращает число, которе находится на заданной позиции (счет начинается с нуля) в ряду фибоначчи.
67- *
96+ * <p>
6897 * Ряд фибоначчи - ряд, следующие элементы которого состоят из суммы двух предыдущих.
6998 * Ряд начинается 0 и 1.
7099 * Пример 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ...
71- *
100+ * <p>
72101 * Для числа 9 метод должен вернуть 34
73102 * Для числа 0 метод должен вернуть 0
74103 */
75104 @ Override
76105 public long calcFibonacci (int number ) {
77- return -1L ;
106+ int result = 0 ;
107+ int cacheOne ;
108+ int cacheTwo = 1 ;
109+
110+ for (int i = 0 ; i < number ; i ++) {
111+ cacheOne = cacheTwo ;
112+ cacheTwo = result ;
113+ result = cacheOne + cacheTwo ;
114+ }
115+
116+ return result ;
78117 }
79118
80119 /**
@@ -83,27 +122,46 @@ public long calcFibonacci(int number) {
83122 */
84123 @ Override
85124 public int [] sort (int [] values ) {
86- return new int []{};
125+ int index = 0 ;
126+ int temp ;
127+ while (index < values .length ) {
128+ if (index == 0 )
129+ index ++;
130+ if (values [index ] >= values [index - 1 ])
131+ index ++;
132+ else {
133+ temp = values [index ];
134+ values [index ] = values [index - 1 ];
135+ values [index - 1 ] = temp ;
136+ index --;
137+ }
138+ }
139+ return values ;
87140 }
88141
89142 /**
90143 * Метод определяет, является ли заданное число простым.
91144 * Простое число - число, которое делится только на 1 и на само себя.
92- *
145+ * <p>
93146 * Например для числа 22 вернется false, а для числа 23 true.
94147 */
95148 @ Override
96149 public boolean isPrimary (int number ) {
97- return false ;
150+ BigInteger bigInteger = new BigInteger (String .valueOf (number ));
151+ return bigInteger .isProbablePrime (1 );
98152 }
99153
100154 /**
101155 * Метод возвращает массив, в котором элементы расположены в обратном порядке.
102- *
156+ * <p>
103157 * Например для массива {-1, -3, 4, 8, 5, 22, -5} метод вернет {-5, 22, 5, 8, 4, -3, -1}
104158 */
105159 @ Override
106160 public int [] reverseArray (int [] values ) {
107- return new int []{};
161+ int [] reverseArray = new int [values .length ];
162+ for (int i = 0 ; i < values .length ; i ++) {
163+ reverseArray [i ] = values [values .length - i - 1 ];
164+ }
165+ return reverseArray ;
108166 }
109167}
0 commit comments