JavaRush /Java блог /Архив info.javarush /Кухня(); Задание N5.
terranum
28 уровень
Milan

Кухня(); Задание N5.

Статья из группы Архив info.javarush
Кухня(); Задание N5. - 1 Правила [Одномерные массивы] Дана последовательность натуральных чисел a1, a2, ..., an. Создать массив из четных чисел этой последовательности. Если таких чисел нет, то вывести сообщение об этом факте.
Комментарии (12)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
timurnav Уровень 21
7 октября 2015
public static int[] method3(int[] array) {
        int[] tmp = new int[array.length];
        int count = 0;
        for (int n : array)
            if (n % 2 == 0)
                tmp[count++] = n;
        if (count != 0)
            return Arrays.copyOf(tmp, count);
        System.out.println("Четных чисел нет");
        return null;
    }
RabenokDmitry Уровень 21
5 февраля 2015
public static int[] findEvenNumbers(int[] array) {
        int[] result = new int[0];
        if (array.length == 0) {
            throw new IllegalArgumentException("Массив нулевой длины!");
        }
        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 == 0 && array[i] > 0) {
                result = Arrays.copyOf(result, result.length + 1);
                result[result.length - 1] = array[i];
            }
        }
        if (result.length != 0) {
            return result;
        } else {
            throw new IllegalArgumentException("В массиве нет четных элементов");
        }

    }


На этом первую пятерку кухни я сегодня завершаю).
Kashey Уровень 11
14 сентября 2014
Попробовал решить тремя способами, и проверить скорость выполнения.
public static int[] getEvenArrayGrowUp(int[] array)
    {
        int[] evenArr = new int[0];
        int count = 0;
        for (int i = 0; i < array.length; i++)
        {
            if (array[i] % 2 == 0)
            {
                evenArr = Arrays.copyOf(evenArr, evenArr.length + 1);
                evenArr[count++] = array[i];
            }
        }
        if (evenArr.length == 0)
            throw new IllegalArgumentException("Natural digits not found");
        return evenArr;
    }

    public static int[] getEvenArrayArrayList(int[] array)
    {
        ArrayList<Integer> tempList = new ArrayList<Integer>();
        for (int i = 0; i < array.length; i++)
        {
            if (array[i] % 2 == 0)
            {
                tempList.add(array[i]);
            }
        }
        int[] evenArr = new int[tempList.size()];
        int count = 0;
        for (Integer I : tempList) evenArr[count++] = I;
        if (evenArr.length == 0)
            throw new IllegalArgumentException("Natural digits not found");
        return evenArr;
    }

    public static int[] getEvenArrayCountAndFor(int[] array)
    {
        int count = 0;
        for (int i = 0; i < array.length; i++)
        {
            if (array[i] % 2 == 0) count++;
        }
        int[] evenArr = new int[count];
        count = 0;
        for (int i = 0; i < array.length; i++)
        {
            if (array[i] % 2 == 0)
            {
                evenArr[count++] = array[i];
            }
        }
        if (evenArr.length == 0)
            throw new IllegalArgumentException("Natural digits not found");
        return evenArr;
     }

При размере массива в 10000, метод с растущим массивом выполняется за 26 мс! Метод с ArrayList — 2 мс, ну а самый простой
Docktor91 Уровень 40
22 августа 2014
не густо))
public static Integer[] findNaturalEvenNumbers(Integer[] arr)
    {
        ArrayList<Integer>array=new ArrayList<>();
        Spliterator<Integer> si=Arrays.spliterator(arr);
        si.forEachRemaining(n-> {if (n%2==0&&n>0) array.add(n);});
        if(array.isEmpty())
            throw new IllegalArgumentException("Nothing found");
        return array.toArray(new Integer[array.size()]);
    }
hubert Уровень 41
21 августа 2014
А на 8 джаве кто осилит?
Docktor91 Уровень 40
21 августа 2014

public static int[] find (int[] arr)
    {
        if (arr.length==0)
            return null;
        int[] result = new int[0];
        for(int i = 0; i < arr.length; i++ )
        {
            if (arr[i]%2 == 0 && arr[i] > 0)
            {
                result = Arrays.copyOf(result, result.length + 1);
                result[result.length - 1] = arr[i];
            }
        }
        if (result.length==0)
            throw new IllegalArgumentException("Natural digits not found");
        return result;
    }