Как вернуть результирующий массив, только с теми числами, которые нацело делятся на divider и являются положительными
Задача в том чтобы вернуть массив целых чисел, делящихся на divider без остатка и эти числа должны быть положительные. Например:
int[] numbers = {2, 5, 8, 0, 7, 1, -4};
int divider = 2;
То результат:
int[] result = {2, 8};
Мой код:
public class Main {
public static void main(String[] args) {
int[] numbers = {2, 5, 8, 0, 7, 1, -4};
int divider = 2;
int[] res = getDivisibleNumbers(numbers, divider);
for (int arr : res) {
System.out.print(arr + " ");
}
}
public static int[] getDivisibleNumbers(int[] numbers, int divider) {
int[] test = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] % divider == 0 && numbers[i] > 0) {
test[i] = numbers[i];
}
}
return test;
}
}
Вывод получается:
2 0 8 0 0 0 0
Подскажите как правильно решить. Заранее спасибо.
Ответы (1 шт):
В данном случае у вас есть несколько возможных решений. Самое оптимальное решение в данном случае - использовать стрим:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = {2, 5, 8, 0, 7, 1, -4};
int divider = 2;
int[] res = getDivisibleNumbers(numbers, divider);
System.out.println(Arrays.toString(res));
}
public static int[] getDivisibleNumbers(int[] numbers, int divider) {
return Arrays.stream(numbers)
.filter(numb -> numb % divider == 0 && numb > 0)
.toArray();
}
}
Это решает главную проблему - создание результирующего массива. Ведь в момент его создания вам неизвестна его длина (отсюда и 0 в вашем решении). Посему лучше брать стрим, тогда о размере массива заботиться не придется.
Как вариант , вы можете использовать коллекцию ArrayList, инкапсулирующую массив для того, чтобы добавлять в нее необходимые числа. А уже после наполнения вызывать метод toArray(), преобразуя ее в массив. И,разумеется, можно сделать 2 прохода по циклу. Первый проход подсчитает кол-во нужных вам цифр, что позволит создать массив нужного размера. Второй проход добавит все цифры в уже созданный массив. Нерационально. но возможно.