Очень многие задачи программирования основаны на манипулировании целыми коллекциями данных, и подраумевают свободное владение методами обработки массивов в JavaScript. Изучение этих методов является также отличным способом достижения очередного уровня мастерства в JavaScript.

1. Клонирование массива

Напишите функцию copyArr(arr) , которая копирует массив не изменяя иригинал.

2. Преобразование массива в строку

Напишите код, который преобразовывает и объединяет все элементы массива в одно строковое значение. Элементы массива будут разделены запятой. Получите результат двумя разными методами.

3. Двоеточие между нечётными числами

Пользователь вводит многозначное число через promt . Напишите функцию colonOdd(num), которая принимает число num в качестве аргумента и вставляет двоеточие (:) между двумя нечетными числами. Например, если вводится число 55639217, то на выход должно быть 5:563:921:7.

4. Замена регистра символов

Пользователь вводит строку кириллицей разного регистра. Напишите функцию, которая принимает строку в качестве аргумента и заменяет регистр каждого символа на противоположный. Например, если вводится «КаЖдЫй ОхОтНиК» , то на выходе должен быть массив [кАжДыЙ оХоТнИк] .

5. Удалить повторяющиеся элементы массива

Напишите функцию removeDuplicates(arr) , которая возвращает массив, в котором удалены повторяющиеся элементы из массива arr (игнорируйте чувствительность к регистру).

6. Найдите високосные годы

Високосным годом является каждый четвертый год и века начинаются только на высокостные года, отличие високосного года от обычного заключается в появлении 366-го дня. Напишите функцию chooseYears(start, end) , которая принимает в качестве аргументов диапозон лет и возвращает массив високосных лет в заданном диапазоне.

7. Отобразить элементы в случайном порядоке

Используя метод sort перепишите предсталенный ниже код, который с помощью цикла for случайно изменяет порядок расстановки элементов массива.

8. Получить первые элементы массива

Напишите функцию getFirst(array, n) , которая возвращает фрагмент массива, содержащий первые ‘n’ элементов массива.

9. Получить последние элементы массива

Напишите функцию getLast(array, n) , которая возвращает фрагмент массива, содержащий последние ‘n’ элементов массива.

10. Сумма элементов двух массивов

Напишите код, который создаёт массив элементов представляющих собой сумму соответствующих элементов заданных массивов.

11. Количество повторяющихся элементов в массиве

Напишите функцию countIdentic(arr) , которая возвращает количество повторяющихся элементов в массиве.

12. Разворачивание массива массивов

Напишите функцию expand(arr) , которая разворачивает вложенный массив любой глубины.

13. Объединить два массива без дублирования элементов

Напишите функцию union , которая возвращает массив состоящий только из уникальных элементов из каждого массива.

14. Разница между двумя массивами

Напишите функцию union , которая возвращает массив, содержащий все элементы arr1, которые не находятся в arr2 и наоборот.

15. Сортировка массива по убыванию

Напишите функцию compareNumbers(arr) , которая возвращает массив, элементы которого отсортированы по убыванию их значений.

16. Наиболее часто используемый элемент массива

Напишите код, который находит наиболее часто используемый элемент массива.

17. Сумма квадратов значений массива

Напишите функцию sumOfSquares(arr) , которая возвращает сумму квадратов значений массива.

18. Сумма и произведение значений массива

Напишите код, который определяет сумму и произведение значений массива.

19. Удаление ложных значений из массива

Напишите функцию filterFalse(arr) , которая очищает массив от ложных (false) значений: false, null, undefined, 0, –0, NaN и "" (пустя строка).

20. Сортировка массива объектов

Напишите код, который отсортирует массив объектов litmir по значению свойства title .

21. Найти пары чисел, сумма которых равна заданному значению

Напишите функцию findCouple(array, number) , которая ищет в массиве все пары целых чисел, сумма которых равна заданному значению.

22. Найти все значения данного свойства в массиве объектов

Напишите функцию propertyValue(array, key) , которая принимает в качестве аргументов массив объектов и имя свойства, а затем возвращает все значения данного свойства из массива объектов.

23. Общая стартовая подстрока в массиве строк

Напишите функцию startingSubstring(arr) , которая возвращает общую начальную подстроку в массиве строк.

24. Удалить определенный элемент из массива

Напишите функцию removeItem(arr, num) , которая удаляет определенный элемент из массива.

25. Вернуть случайный элемент из массива

Напишите функцию randomElement(arr) , которая возвращает случайный элемент из массива.

26. Массив с заданным количеством элементов

Напишите функцию arrayFilled(len, value) , которая возвращает массив с заданным количеством len элементов value .

27. Переместить элемент массива из одной позиции в другую

Напишите функцию moveElement(arr,from,to) , которая позволяет переместить элемент массива из позиции from в позицию to .

28. Массив указанной длины

Напишите функцию generateNumbers(start, len) , которая генерирует массив заданной длины len , заполненный целыми числами, где каждое число больше предыдущего на единицу.

29. Массив, содержащий все целые числа между start и end

Напишите функцию generateRange(start, end) , которая генерирует массив заданной длины len , заполненный целыми числами. Каждое последующее число в массиве должно быть больше предыдущего на единицу.

30. Массив длин строковых элементов

Используя метод map() напишите код, который получает из массива строк новый массив, содержащий их длины.

31. Массив сумм чисел

Имеется массив простых чисел: numbers = [2, 3, 5, 7, 11, 13, 17, 19]. Использую метод reduce() напишите функцию currentSums(numbers), которая возвращает новый массив из такого же числа элементов, в котором на каждой позиции будет находиться сумма элементов массива numbers до этой позиции включительно.

32. Равные в сумме пары чисел

Напишите код, который получает из массива чисел новый массив, содержащий пары чисел, которые в сумме должны быть равны семи: (0:7), (1:6) и т.д.

33. Массив из первых букв

Перед вами переменная, содержащая строку. Напишите код, создащий массив, который будет состоять из первых букв слов строки str. При написании данного кода, позаимствуйте у объека Array метод filter.

34. Массив строк по три символа

Перед вами переменная, содержащая строку. Напишите код, создащий массив, который будет состоять из строк, состоящих из предыдущего, текущего и следующего символа строки str. При написании данного кода, позаимствуйте у объека Array метод map.

35. Получить массив цифр по убыванию

Напишите код, преобразующий массив цифр, которые располагаются неупорядоченно, в массив цифр расположенных по убыванию их значений.

36. Слияние массивов

Напишите код, объединяющий три массива цифр, и располагающий, с помощью метода pop(), цифры в полученном массиве в порядке убывания их значений через пробел.

Практические задачи по Java — для курсов и прочих занятий

Несколько вводных слов

Последние несколько лет я читаю курс по программированию на Java. Со временем он менялся — то добавлялись, то выкидывались разные части, менялась последовательность тем, менялся подход к построению плана самих занятий, и так далее. То есть, курс совершенствовался. Одной из основных проблем, возникших при подготовке курса — это задачи. О них и пойдёт речь.

Дело в том, что каждое моё занятие состоит из двух частей. На первой я выступаю в роли лектора — рассказываю с примерами кода о какой-то новой теме (классы, наследование, дженерики и так далее). Вторая часть — практическая. Очевидно, что нет смысла просто рассуждать о программировании, надо программировать. Приоритет на занятиях — решение задач, то есть программирование чего-то как-то. Программирование на занятиях отличается от программирования дома, так как на занятиях можно задать вопрос, показать код, получить быструю оценку кода, комментарии по улучшению, исправлению написанного. Очень легко было найти задачи для самых первых занятий. Задачи на циклы, условные операторы, и ООП (к примеру, написать класс «Собака» или класс «Вектор»). Сервисы вроде leetcode позволяют даже проверить правильность решения таких задач сразу, онлайн. Но какие задачи дать студентам на занятии, которое было посвящено коллекциям? Потокам? А аннотациям? За несколько лет я придумал, или переработал несколько таких задач, и эта статья, по сути, является сборником этих задач (к некоторым задачам прилагается решение).

Конечно, все задачи уже где-то появлялись. Однако, эта статья ориентирована на преподавателей курсов по программированию (для языков, похожих на Java, большинство задач подойдёт), или тех, кто преподаёт программирование частным образом. Эти задачи можно использовать «из коробки» на своих занятиях. Изучающие Java тоже могут попробовать решать их. Но такие решения требуют сторонней проверки и оценки.

Некоторые самые простые задачи, которые уже десятилетия все используют, я тоже включил в эту статью. Пожалуй, для того, чтобы не начинать сразу с абстрактных классов.

1. Объявление массива в Java

Одномерные массивы в Java представляют собой список однотипных переменных. Чтобы создать массив, нужно сначала объявить переменную массива требуемого типа.

Общая форма объявления одномерного массива выглядит следующим образом:

где параметр тип обозначает тип элемента массива, называемый также базовым типом.

Квадратные скобки можно ставить перед переменной или после нее. Но более правильным вариантом считается указание скобок перед переменной — таким образом тип и скобки находятся в одном месте, что позволяет с первого взгляда понять, что перед вами массив такого-то типа:

2. Инициализация массива с помощью ключевого слова new

Когда массив объявлен, память под него еще не выделена. Для выделение памяти под массив используется ключевое слово new , после которого опять указывается тип массива и в квадратных скобках его размер:

Массив может быть объявлен и инициализирован одной строкой:

Рассмотрим пример объявления массива типа int размером 12 на данном примере. После выполнения строки int[] monthDays = new int[12] массив из 12 элементов создан. Каждому элементу присваивается значение по умолчанию для заданного типа. Для типа int это ноль. Для обращения к отдельному элементу массива после имени массива в квадратных скобочках задаем индекс элемента. Таким образом мы можем обратиться к элементу массива для изменения или получения его значения:

3. Инициализация массива с помощью блока для инициализации

Если заранее известны значения для каждого элемента массива, можно использовать блок для инициализации массива. Вместо new int[12] , в фигурных скобках через запятую перечисляются значения элементов массива. Размер массива выводится компилятором из количества указанных элементов:

4. Безымянный массив

Существует еще и третья форма объявления массива — безымянный массив. Он может использоваться в двух случаях.

Первый — вы объявили и инициализировали массив testScores размера четыре, но потом по какой-то причине он должен быть изменен — он должен содержать три элемента. Использовать повторно форму для инициализации массива нельзя — будет ошибка компиляции:

Но можно использовать безымянный массив, который создаст новый массив в памяти. Форма написания безымянного массива — это микс первых двух:

Второй случай использования безымянного массива — это передача массива в метод. В следующем примере метод print принимает на входа массив типа int . При вызове метода в качестве аргумента можно передать безымянный массив.