JavaRush /Java блог /Архив info.javarush /Кухня(); Задание N5. terranum 28 уровень Milan 20 августа 2014 2729 views 12 comments Кухня(); Задание N5. Статья из группы Архив info.javarush Присоединиться Правила [Одномерные массивы] Дана последовательность натуральных чисел 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; }
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
На этом первую пятерку кухни я сегодня завершаю).
При размере массива в 10000, метод с растущим массивом выполняется за 26 мс! Метод с ArrayList — 2 мс, ну а самый простой