11package com .epam .izh .rd .online .service ;
22
3+ import java .util .ArrayList ;
4+ import java .util .List ;
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+ if (value1 == value2 ) {
20+ return 0 ;
21+ } else if (value1 < value2 ) {
22+ return -1 ;
23+ } else {
24+ return 1 ;
25+ }
1726 }
1827
1928 /**
@@ -22,7 +31,11 @@ public int compare(int value1, int value2) {
2231 */
2332 @ Override
2433 public int maxFrom (int value1 , int value2 ) {
25- return -1 ;
34+ if (value1 > value2 ) {
35+ return value1 ;
36+ } else {
37+ return value2 ;
38+ }
2639 }
2740
2841 /**
@@ -31,7 +44,13 @@ public int maxFrom(int value1, int value2) {
3144 */
3245 @ Override
3346 public int maxFrom (int [] values ) {
34- return -1 ;
47+ int max = values [0 ];
48+ for (int i = 1 ; i < values .length ; i ++) {
49+ if (max < values [i ]) {
50+ max = values [i ];
51+ }
52+ }
53+ return max ;
3554 }
3655
3756 /**
@@ -40,7 +59,11 @@ public int maxFrom(int[] values) {
4059 */
4160 @ Override
4261 public int sum (int [] values ) {
43- return -1 ;
62+ int result = 0 ;
63+ for (int value : values ) {
64+ result += value ;
65+ }
66+ return result ;
4467 }
4568
4669 /**
@@ -49,7 +72,19 @@ public int sum(int[] values) {
4972 */
5073 @ Override
5174 public int [] getEvenDigits (int [] values ) {
52- return new int []{};
75+ ArrayList <Integer > evenDigitsList = new ArrayList <>();
76+ for (int value : values ) {
77+ if (value % 2 == 0 ) {
78+ evenDigitsList .add (value );
79+ }
80+ }
81+
82+ int [] arr = new int [evenDigitsList .size ()];
83+ for (int i = 0 ; i < evenDigitsList .size (); i ++) {
84+ arr [i ] = (int ) evenDigitsList .get (i );
85+ }
86+
87+ return arr ;
5388 }
5489
5590 /**
@@ -59,22 +94,36 @@ public int[] getEvenDigits(int[] values) {
5994 */
6095 @ Override
6196 public long calcFactorial (int initialVal ) {
62- return -1L ;
97+ int result = 1 ;
98+ for (int i = 1 ; i <= initialVal ; i ++) {
99+ result *= i ;
100+ }
101+ return result ;
63102 }
64103
65104 /**
66105 * Метод возвращает число, которе находится на заданной позиции (счет начинается с нуля) в ряду фибоначчи.
67- *
106+ * <p>
68107 * Ряд фибоначчи - ряд, следующие элементы которого состоят из суммы двух предыдущих.
69108 * Ряд начинается 0 и 1.
70109 * Пример 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ...
71- *
110+ * <p>
72111 * Для числа 9 метод должен вернуть 34
73112 * Для числа 0 метод должен вернуть 0
74113 */
75114 @ Override
76115 public long calcFibonacci (int number ) {
77- return -1L ;
116+ int result = 0 ;
117+ int cacheOne ;
118+ int cacheTwo = 1 ;
119+
120+ for (int i = 0 ; i < number ; i ++) {
121+ cacheOne = cacheTwo ;
122+ cacheTwo = result ;
123+ result = cacheOne + cacheTwo ;
124+ }
125+
126+ return result ;
78127 }
79128
80129 /**
@@ -83,27 +132,52 @@ public long calcFibonacci(int number) {
83132 */
84133 @ Override
85134 public int [] sort (int [] values ) {
86- return new int []{};
135+ int index = 0 ;
136+ int temp ;
137+ while (index < values .length ) {
138+ if (index == 0 )
139+ index ++;
140+ if (values [index ] >= values [index - 1 ])
141+ index ++;
142+ else {
143+ temp = values [index ];
144+ values [index ] = values [index - 1 ];
145+ values [index - 1 ] = temp ;
146+ index --;
147+ }
148+ }
149+ return values ;
87150 }
88151
89152 /**
90153 * Метод определяет, является ли заданное число простым.
91154 * Простое число - число, которое делится только на 1 и на само себя.
92- *
155+ * <p>
93156 * Например для числа 22 вернется false, а для числа 23 true.
94157 */
95158 @ Override
96159 public boolean isPrimary (int number ) {
97- return false ;
160+ for (int i = 2 ; i <= number / 2 ; i ++) {
161+ if ((number % i ) == 0 ) {
162+ return false ;
163+ }
164+ }
165+ return true ;
98166 }
99167
100168 /**
101169 * Метод возвращает массив, в котором элементы расположены в обратном порядке.
102- *
170+ * <p>
103171 * Например для массива {-1, -3, 4, 8, 5, 22, -5} метод вернет {-5, 22, 5, 8, 4, -3, -1}
104172 */
105173 @ Override
106174 public int [] reverseArray (int [] values ) {
107- return new int []{};
175+ int buf ;
176+ for (int i = 0 ; i < values .length / 2 ; i ++) {
177+ buf = values [i ];
178+ values [i ] = values [values .length - 1 - i ];
179+ values [values .length - 1 - i ] = buf ;
180+ }
181+ return values ;
108182 }
109183}
0 commit comments