The challenge
Complete the function which takes two arguments and returns all numbers which are divisible by the given divisor. First argument is an array of numbers
and the second is the divisor
.
Example
divisibleBy([1, 2, 3, 4, 5, 6], 2) == [2, 4, 6]
The solution in Java
Option 1 (using streams
):
import java.util.stream.*;
import java.util.Arrays;
public class EvenNumbers {
public static int[] divisibleBy(int[] numbers, int divider) {
return Arrays.stream(numbers)
.filter(i -> (i % divider) == 0)
.toArray();
}
}
Option 2 (writing the code ourselves):
public class EvenNumbers {
public static int[] divisibleBy(int[] numbers, int divider) {
int count = 0;
for (int number : numbers){
if (number % divider == 0){
count ++;
}
}
int[] arr = new int[count];
int i = 0;
for (int number : numbers){
if (number % divider == 0){
arr[i] = number;
i++;
}
}
return arr;
}
}
Test cases to validate our code
import java.util.Arrays;
import java.util.Random;
import static org.junit.Assert.assertArrayEquals;
import org.junit.Test;
public class EvenNumbersTest {
private static int[] divisibleBy(int[] numbers, int divider) {
return Arrays.stream(numbers).filter(n -> n % divider == 0).toArray();
}
@Test public void testSimple() {
assertArrayEquals(new int[] {2,4,6}, EvenNumbers.divisibleBy(new int[] {1,2,3,4,5,6},2));
assertArrayEquals(new int[] {3,6}, EvenNumbers.divisibleBy(new int[] {1,2,3,4,5,6},3));
assertArrayEquals(new int[] {0,4}, EvenNumbers.divisibleBy(new int[] {0,1,2,3,4,5,6},4));
}
@Test public void testRandom() {
Random r = new Random();
for (int i = 0; i < 20; i++) {
int n = 2 + r.nextInt(10);
int[] a = r.ints(100,0,100).toArray();
assertArrayEquals(divisibleBy(a, n), EvenNumbers.divisibleBy(a, n));
}
}
}