копировать элемент массива не используя метод System.arraycopy()?
Практики не бывает много, а тем более, когда речь идет об операциях над массивами! А у нас тут завалялось несколько массивов со случайными числами, как раз поможешь нам их немного подчистить. Создай метод getDivisibleNumbers(), который будет принимать два параметра: входной массив int [] numbers и int divider. А возвращать результирующий массив только с теми числами, которые нацело делятся на int divider и является положительными.
Пример: С такими входными данными:
int [] numbers = {2, 5, 8, 0, 7, 1, -4};
int divider = 2;
ожидаемый результат:
int [] result = {2, 8};
Я так понял что алгоритм такой:
- проверить как делится элемент массива
- создать промежуточный массив равен длинной исходному массиву numbers
- присвоить результат деления в промежуточный массив
- тут я не знаю надо либо по удалять в промежуточном массиве те ячейки которые не заполненны и тогда он же станет результатирующим массивом либо взять элементы из этого промежуточного массива и переписать в результатирующий массив который надо создать отдельно но в таком случае как прописать его длину?
Ответы (2 шт):
Автор решения: DeMmAge
→ Ссылка
public class Main {
public static void main(String[] args) {
int[] numbers = {2, 5, 8, 0, 7, 1, -4};
int divider = 2;
int[] array = getDivisibleNumbers(numbers, divider);
IntStream.of(array).forEach(System.out::println);
}
private static int[] getDivisibleNumbers(int[] array, int devider) {
return IntStream.of(array)
.filter(i -> i > 0)
.filter(i -> i % devider == 0)
.toArray();
}
}
Автор решения: Alex Rudenko
→ Ссылка
Если функциональное решение с использованием Java Stream API по какой-либо причине не приемлемо, можно использовать другой алгоритм:
- на первом проходе определить количество элементов во входном массиве, удовлетворяющих условию
- создать результирующий массив нового размера
- скопировать в него все подходящие элементы из входного массива, пока результирующий массив не будет заполнен.
static int[] getDivisibleNumbers(int[] arr, int divider) {
int count = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 0 && arr[i] % divider == 0) {
count++;
}
}
int[] result = new int[count];
for (int i = 0, j = 0; i < arr.length && j < count; i++) {
if (arr[i] > 0 && arr[i] % divider == 0) {
result[j++] = arr[i];
}
}
return result;
}