Начавшаяся в конце 20 века компьютерная революция привела в середине 90-х годов к созданию интернета (веба). И это было началом еще большей революции. Эффект от появления интернета сопоставим с эффектом индустриализации. Но самое вкусное в том, что этот процесс еще находится в самом начале.
Новый мир
Количество сайтов превышает 200 миллионов. Пользователей интернета – 3 миллиарда. Интернет-аукционы, интернет-сайты, интернет-магазины, интернет-услуги. ИТ-экономика растет на 20%-30% ежегодно. Это чудовищные темпы. Но они все не падают и не падают.
За последние 10 лет в Силиконовой Долине (центр ИТ-мира), каждые 2 месяца основывалась компания, впоследствии стоящая миллиард долларов. И это не говоря уже о таких звездах интернета, как Facebook ($220 миллиардов), Amazon ($140 миллиардов) и Google ($350 миллиардов). Все эти компании не появились бы, если бы не было интернета.
Все это приводит к высокому спросу на ИТ-специалистов. Мировой ИТ-экономике требуются: программисты, дизайнеры, тестировщики, архитекторы, менеджера, системные администраторы и другие специалисты.
Хорошо быть айтишником
Если вы ИТ-специалист, то для вас настало золотое время. Вы можете работать на западную компанию, а жить – в небольшом городе или вообще в другой стране. Доходы будут, конечно, меньше чем на западе (обычно раза в два), но выше, чем на местном рынке труда (в 3-10 раз). Чем меньше ваш город, тем заметней разница.
Вы будете получать ценный опыт работы, хорошие деньги и блестящие перспективы. Иногда будете ездить в командировки в офис к работодателю. А если вам там очень понравится, можете туда и переехать.
Прилив поднимает все лодки. Но почему бы вам не оказаться той лодкой, которая находится в нужное время и в нужном месте? Это тоже надо уметь.
Перспективы иммиграции
На западе ИТ-специалисты входят в тройку самых высокооплачиваемых профессий наряду с врачами и юристами. Средние зарплаты программистов около $90 тысяч/год. Но самое интересное в том, что ИТ-профессии отлично подходят для глобального рынка труда.
Что будет, если врач захочет сменить страну? Другая страна – другие медицинские стандарты. С дипломом его страны работать в новой скорее всего не дадут. Придется выучить язык, заново сдать экзамены, пройти практику – долгий путь.
У юристов все еще хуже. В одной стране одни законы, в другой - другие. Тут главнее связи, там - прецедентное право. От хороших юристов из одного места будет мало толку в другом.
ИТ-специалисты. Очень часто напрямую или через посредников работают на крупные западные компании. Те же технологии, те же бизнес-процессы. Вся документация в интернете на английском. Резюме – на английском. Можно переехать в любую страну мира и ничего не поменяется. Даже заказчики/работодатели часто одни и те же.
А зарплаты айтишников в Калифорнии ох как хороши. Вот зачем нужно все время развиваться.
Лучший способ мотивировать себя что-то учить - это заплатить за это деньги. Жадность банально сильнее лени.
- Привет, Амиго!
- День добрый, Элли!
- Сегодня я расскажу тебе о новой интересной сущности – о массивах. Массив – это специальный тип данных, который может хранить не одно значение, а несколько.
- Начну с аналогии. Давай сравним обычный жилой дом и многоэтажку. В обычном доме чаще всего живет одна семья, а многоэтажка разбита на квартиры. Чтобы написать письмо семье, которая живет в обычном доме, надо указать его уникальный адрес. А чтобы написать письмо семье, которая живет в квартире, надо указать уникальный адрес дома и еще номер квартиры.
- Да, тут все понятно.
- Так вот, переменная-массив – это переменная-многоэтажка. В ней можно хранить не одно значение, а несколько. В такой переменной есть несколько квартир (ячеек), к каждой из которых можно обратиться по ее номеру (индексу). Для этого после имени переменной в квадратных скобках надо указать индекс ячейки, к которой обращаемся. Это довольно просто.
- Надеюсь.
- Переменная-многоэтажка (переменная-массив) может быть любого типа, надо лишь вместо «TypeName имя_переменной», написать «TypeName[] имя_переменной».
- Примеры:
Код | Пояснение | |
---|---|---|
String[] list = new String[5]; | Создание массива на 5 элементов типа «строка» | |
System.out.println(list[0]); System.out.println(list[1]); System.out.println(list[2]); System.out.println(list[3]); System.out.println(list[4]); |
На экран будет выведено пять значений “null”. Чтобы получить значение, которое хранится в определенной ячейке массива, используйте квадратные скобки и номер ячейки |
|
int listCount = list.length; | listCount получит значение 5 – количество ячеек в массиве list. list.length хранит длинну(количество ячеек) массива. |
|
list[1] = "Mama"; String s = list[1]; |
При присваивании объектов ячейкам массива нужно указывать индекс/номер ячейки в квадратных скобках. | |
for (int i = 0; i < list.length; i++) { System.out.println(list[i]); } |
Вывод всех значений массива на экран. |
- Как интересно.
- Переменная-массив требует дополнительной инициализации.
- ?
- Обычную переменную нужно было просто объявить и уже можно присваивать ей различные значения. С массивом все немного сложнее.
- Сначала надо создать контейнер на N элементов, а затем в него уже можно класть значения.
Код | Пояснение |
---|---|
String[] list = null; | Переменная-массив list, ее значение – null. Она может хранить только контейнер для элементов. Контейнер надо создавать отдельно. |
String[] list = new String[5]; | Мы создаем контейнер на 5 элементов и кладем ссылку на него в переменную list. Этот контейнер содержит 5 квартир (ячеек) с номерами 0, 1, 2, 3, 4. |
String[] list = new String[1]; | Мы создаем контейнер на 1 элемент и кладем ссылку на него в переменную list. Чтобы занести что-то в этот контейнер надо написать list[0] = “Yo!”; |
String[] list = new String[0]; | Мы создаем контейнер на 0 элементов и кладем ссылку на него в переменную list. Ничего в этот контейнер занести нельзя! |
- Ага. Кое-что проясняется.
- Основные факты о массивах:
1) Массив состоит из множества ячеек.
2) Доступ к конкретной ячейке идёт через указание её номера.
3) Все ячейки одного типа.
4) Начальное значение для всех ячеек – null, для примитивных типов – 0, 0.0 (для дробных), false (для типа boolean). Точно такое же, как и у простых неинициализированных переменных.
5) String[] list - это просто объявление переменной. Сначала нужно создать массив (контейнер) и положить его в эту переменную, а потом уже им пользоваться. См. пример ниже.
6) Когда мы создаём объект массив (контейнер), нужно указать, какой он длины – сколько в нем ячеек. Это делается командой вида: new TypeName[n];
- Примеры:
Код | Пояснение | |
---|---|---|
String s; String[] list; |
s равно null list равно null |
|
list = new String[10]; int n = list.length; |
Переменная list хранит ссылку на объект - массив строк из 10 элементов. n равно 10 |
|
list = new String[0]; | Теперь list содержит массив из 0 элементов. Массив есть, но хранить элементы он не может. | |
list = null; System.out.println(list[1]); |
Будет сгенерировано исключение (ошибка программы) – программа аварийно завершится. list содержит пустую ссылку – null | |
list = new String[10]; System.out.println(list[11]); |
Будет сгенерировано исключение (ошибка программы) – выход за границы массива. Если list содержит 10 элементов/ячеек, то их разрешённые индексы: 0,1,2,3,4,5,6,7,8,9 – всего 10 штук. |
- Привет, Амиго! Давай я покажу тебе, как это все работает в памяти:
- А что это ещё за 345?
- Вообще-то я взял его с потолка, но, по идее, это адрес строки, содержащей слово «Мама».
- С массивами все немного сложнее:
- 155,166,177 – это тоже взятые с потолка числа, символизирующие адреса строк справа?
- Ага. Хорошо, что ты сам догадался. Обрати внимание, тут присутствует дополнительный объект – массив из 10 ячеек.
- Все ясно и понятно, спасибо. Действительно, лучше один раз увидеть. Спасибо, Риша.
- Хочу дать тебе несколько примеров, что интересного можно делать с массивами:
Пример 1.
Заполнение массива из 10 чисел, числами от 1 до 10: | |
---|---|
public class MainClass { public static void main(String[] args) { int[] numbers = new int[10]; for (int i = 0; i < numbers.length; i++) { numbers[i] = i + 1; } } } |
|
Заполнение массива из 10 чисел, числами от 10 до 1: | |
public class MainClass { public static void main(String[] args) { int[] numbers = new int[10]; for (int i = 0; i < numbers.length; i++) { numbers[i] = 10 - i; } } } | |
Заполнение массива из 10 чисел, числами от 0 до 9: | |
public class MainClass { public static void main(String[] args) { int[] numbers = new int[10]; for (int i = 0; i < numbers.length; i++) { numbers[i] = i; } } } | |
Заполнение массива из 10 чисел, числами от 9 до 0: | |
public class MainClass { public static void main(String[] args) { int[] numbers = new int[10]; for (int i = 0; i < numbers.length; i++) { numbers[i] = 9 - i; } } } |
Пример 2.
Ввод 10 строк с клавиатуры | |
---|---|
public class MainClass { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String[] list = new String[10]; for (int i = 0; i < list.length; i++) { list[i] = reader.readLine(); } } } |
|
Ввод 10 чисел с клавиатуры | |
public class MainClass { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int[] list = new int[10]; for (int i = 0; i < list.length; i++) { String s = reader.readLine(); list[i] = Integer.parseInt(s); } } } |
Пример 3.
Вывод массива на экран | |
---|---|
public class MainClass { public static void main(String[] args) throws IOException { int[] list = new int[10]; //заполнение массива for (int i = 0; i < list.length; i++) list[i] = i; //вывод на экран for (int i = 0; i < list.length; i++) System.out.println(list[i]); } } |
Пример 4.
Быстрая (статическая) инициализация. Сумма элементов массива: | |
---|---|
public class MainClass { public static void main(String[] args) throws IOException { //это статическая инициализация int[] list = {5, 6, 7, 8, 1, 2, 5, -7, -9, 2, 0}; //подсчёт суммы элементов int sum = 0; for (int i = 0; i < list.length; i++) sum += list[i]; System.out.println("Sum is " + sum); } } |
Пример 5.
Поиск минимального элемента в массиве: | |
---|---|
public class MainClass { public static void main(String[] args) throws IOException { int[] list = {5, 6, 7, 8, 1, 2, 5, -7, -9, 2, 0}; int min = list[0]; for (int i = 1; i < list.length; i++) { if (list[i] < min) min = list[i]; } System.out.println ("Min is " + min); } } |
- Привет, Амиго! Вот тебе пара задачек, дружище:
Задачи |
---|
1. Максимальное среди массива на 20 чисел 1. В методе initializeArray(): 1.1. Создайте массив на 20 чисел 1.2. Считайте с консоли 20 чисел и заполните ими массив 2. Метод max(int[] array) должен находить максимальное число из элементов массива |
2. Массив из строчек в обратном порядке 1. Создать массив на 10 строчек. 2. Ввести с клавиатуры 8 строчек и сохранить их в массив. 3. Вывести содержимое всего массива (10 элементов) на экран в обратном порядке. Каждый элемент - с новой строки. |
3. 2 массива 1. Создать массив на 10 строк. 2. Создать массив на 10 чисел. 3. Ввести с клавиатуры 10 строк, заполнить ими массив строк. 4. В каждую ячейку массива чисел записать длину строки из массива строк, индекс/номер ячейки которой совпадает с текущим индексом из массива чисел. Вывести содержимое массива чисел на экран, каждое значение выводить с новой строки. |
4. Массив из чисел в обратном порядке 1. Создать массив на 10 чисел. 2. Ввести с клавиатуры 10 чисел и записать их в массив. 3. Расположить элементы массива в обратном порядке. 4. Вывести результат на экран, каждое значение выводить с новой строки. |
5. Один большой массив и два маленьких 1. Создать массив на 20 чисел. 2. Ввести в него значения с клавиатуры. 3. Создать два массива на 10 чисел каждый. 4. Скопировать большой массив в два маленьких: половину чисел в первый маленький, вторую половину во второй маленький. 5. Вывести второй маленький массив на экран, каждое значение выводить с новой строки. |
- А вот и я.
- Привет, Элли!
- Сегодня новая интересная тема! Сейчас я расскажу тебе о новом интересном классе – ArrayList.
- О, новый класс? Круто! И что он умеет делать?
- Начну с небольшой предыстории. Программистам очень не нравилось одно свойство массива – его размер нельзя изменять. Что делать, если нужно сохранить в массиве ещё три элемента, а свободное место только одно?
- Единственным решением проблемы нехватки места в массиве было создание массива очень большого размера, чтобы все элементы туда точно поместились. Но это часто приводило к нерациональному расходу памяти. Если чаще всего в массиве хранилось три элемента, но был хотя бы мизерный шанс, что там их будет 100, приходилось создавать массив на 100 элементов.
- И что же придумали программисты?
- Они написали класс ArrayList, который выполнял ту же работу, что и Array (массив), но мог изменять свой размер.
- Интересный ход. И как же они это сделали?
- Внутри каждого объекта типа ArrayList хранится обычный массив элементов. Когда ты считываешь элементы из ArrayList, он считывает их из своего внутреннего массива. Когда записываешь – записывает их во внутренний массив. Вот сравни:
Array | ArrayList | |
---|---|---|
Создание контейнера элементов | ||
String[] list = new String[10]; | ArrayList<String> list = new ArrayList<String>(); | |
Получение количества элементов | ||
int n = list.length; | int n = list.size(); | |
Взятие элемента из массива/коллекции | ||
String s = list[3]; | String s = list.get(3); | |
Запись элемента в массив | ||
list[3] = s; | list.set(3, s); |
- И в чем же преимущество ArrayList? Как по мне, так код стал длиннее.
- Во-первых, ArrayList поддерживает несколько дополнительных действий, которые очень часто приходится делать программистам во время работы, и которых нет у массива. Например – вставка и удаление элементов из середины массива, и чтобы не оставалось дырок.
- Во-вторых, изменение размера: когда нужно записать во внутренний массив ещё один элемент, а свободного места там нет, то внутри ArrayList делается вот что:
а) создаётся ещё один массив, вдвое большего размера.
б) все элементы из старого массива копируются в новый массив.
в) новый массив сохраняется во внутренней переменной объекта ArrayList, старый массив объявляется мусором (мы просто перестаём хранить на него ссылку).
Array | ArrayList | |
---|---|---|
Добавление элемента в конец массива | ||
Невозможно выполнить данное действие | list.add(s); | |
Вставка элемента в середину массива | ||
Невозможно выполнить данное действие | list.add(15, s); | |
Вставка элемента в начало массива | ||
Невозможно выполнить данное действие | list.add(0, s); | |
Удаление элемента из массива | ||
Можно стереть элемент с помощью list[3] = null. Но тогда останется «дыра» в массиве. | list.remove(3); |
- А как работать с этим ArrayList’ом?
- А практически так же, как и с массивом. Вот смотри. Давай сравним работу с ArrayList с работой с массивом. Для примера решим такую задачу «ввести 10 строк с клавиатуры и вывести их на экран в обратном порядке» .
- Смотри:
Используем Array | Используем ArrayList | |
---|---|---|
public static void main(String[] args) { Reader r = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(r); //ввод строк с клавиатуры String[] list = new String[10]; for (int i = 0; i < list.length; i++) { String s = reader.readLine(); list[i] = s; } //вывод содержимого массива на экран for (int i = 0; i < list.length; i++) { int j = list.length - i - 1; System.out.println( list[j] ); } } |
public static void main(String[] args) { Reader r = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(r); //ввод строк с клавиатуры ArrayList<String> list = new ArrayList<String>(); for (int i = 0; i < 10; i++) { String s = reader.readLine(); list.add(s); } //вывод содержимого коллекции на экран for (int i = 0; i < list.size(); i++) { int j = list.size() - i - 1; System.out.println( list.get(j) ); } } |
- Я раскрасил одним цветом эквивалентные действия в обеих колонках.
- С одной стороны все по-другому, с другой – все осталось тем же самым.
- Ага. Только мы теперь не используем квадратные скобочки при работе с ArrayList. Вместо них мы используем методы get, set и add.
- Да, я уже заметил. Но все равно очень похоже.
- Ты опять ничего не делаешь? Ты же робот! Роботы все время чем-то заняты. Вот тебе пара задачек, чтобы ты не расслаблялся. Но для начала – пара подсказок:
- Подсказка 1:
Список (анг. List), чаще всего под этим словом подразумевается ArrayList.
- Подсказка 2:
Строка (анг. String), под этим подразумевается тип String.
- Подсказка 3:
Создать список строк чаще всего означает: ArrayList<String> list = new ArrayList<String>();
Задачи |
---|
Задача 1. 5 различных строчек в списке 1. Создай список строк. 2. Добавь в него 5 различных строчек. 3. Выведи его размер на экран. 4. Используя цикл, выведи его содержимое на экран, каждое значение с новой строки. |
Задача 2. Самая длинная строка 1. Создай список строк. 2. Считай с клавиатуры 5 строк и добавь в список. 3. Используя цикл, найди самую длинную строку в списке. 4. Выведи найденную строку на экран. 5. Если таких строк несколько, выведи каждую с новой строки. |
Задача 3. Самая короткая строка 1. Создай список строк. 2. Считай с клавиатуры 5 строк и добавь в список. 3. Используя цикл, найди самую короткую строку в списке. 4. Выведи найденную строку на экран. 5. Если таких строк несколько, выведи каждую с новой строки. |
Задача 4. 10 строчек в начало списка 1. Создай список строк в методе main. 2. Добавь в него 10 строчек с клавиатуры, но только добавлять не в конец списка, а в начало. 3. Используя цикл, выведи содержимое на экран, каждое значение с новой строки. |
Задача 5. Удали последнюю строку и вставь её в начало 1. Создай список строк. 2. Добавь в него 5 строчек с клавиатуры. 3. Удали последнюю строку и вставь её в начало. Повторить 13 раз. 4. Используя цикл, выведи содержимое на экран, каждое значение с новой строки. |
- И ещё одна крутая тема.
- Одни сюрпризы. Прямо не день, а день рождения.
- Сегодня я расскажу тебе, что такое Generics. “Дженерики” – это типы с параметром. В Java классы-контейнеры позволяют указывать тип их внутренних объектов.
- Когда мы объявляем generic-переменную, то мы указываем не один тип, а два: тип переменной и тип данных, которые она у себя хранит.
Хороший пример этого – ArrayList. Когда мы создаём новый объект/переменную типа ArrayList, нам удобно указать, значения какого типа будут храниться внутри этого списка.
Код | Пояснение |
---|---|
ArrayList<String> list = new ArrayList<String>(); | Мы создали переменную list типа ArrayList. Занесли в нее объект типа ArrayList. В таком списке можно хранить только переменные типа String. |
ArrayList list = new ArrayList(); | Мы создали переменную list типа ArrayList. Занесли в нее объект типа ArrayList. В таком листе можно хранить переменные любого типа. |
ArrayList<Integer> list = new ArrayList<Integer>(); | Мы создали переменную list типа ArrayList. Занесли в нее объект типа ArrayList. В таком листе можно хранить только переменные типа Integer и int. |
- Звучит очень интересно. Особенно про любой тип.
- Это только кажется, что это хорошо. На самом деле, если в одном методе в ArrayList кладутся строки, а в другом мы работаем с его содержимым и ожидаем, что там будут только числа, программа упадет (закроется с ошибкой).
- Ясно.
- Пока что мы не будем создавать свои классы с типами-параметрами, но будем использовать чужие.
- А в качестве типа-параметра можно поставить любой класс, даже тот, что напишу я?
- Да, любой тип, кроме примитивных типов. Все классы-параметры должны быть унаследованы от класса Object.
- Т.е. я не могу написать ArrayList<int> ?
- В общем-то, да, не можешь. Но для примитивных типов разработчики языка Java написали их непримитивные аналоги - классы, унаследованные от Object. Вот как это будет выглядеть:
Примитивный тип | Класс | Список |
---|---|---|
int | Integer | ArrayList<Integer> |
double | Double | ArrayList<Double> |
boolean | Boolean | ArrayList<Boolean> |
char | Character | ArrayList<Character> |
byte | Byte | ArrayList<Byte> |
- Примитивные типы и их классы-аналоги (классы-обёртки) можно спокойно присваивать друг другу:
Примеры |
---|
int a = 5; Integer b = a; int c = b; |
Character c = 'c'; //литерал 'c' имеет тип char char d = c; |
Byte b = (byte) 77; //литерал 77 имеет тип int |
Boolean isOk = true; //литерал true имеет тип boolean |
Double d = 1.0d; //литерал 1.0d имеет тип double |
- Отлично. Тогда я думаю, я буду почаще использовать ArrayList.
- Давай-ка я начну с действительно полезных вещей. Сейчас ты увидишь несколько полезных примеров работы с ArrayList и Generics:
- Пример 1:
Ввод списка целых чисел с клавиатуры | |
---|---|
public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in) ); ArrayList<Integer> list = new ArrayList<Integer>(); while (true) { String s = reader.readLine(); if (s.isEmpty()) break; list.add(Integer.parseInt(s)); } } |
- Пример 2:
То же, чётные числа добавляются в конец списка, нечётные – в начало. | |
---|---|
public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); ArrayList<Integer> list = new ArrayList<Integer>(); while (true) { String s = reader.readLine(); if (s.isEmpty()) break; int x = Integer.parseInt(s); if (x % 2 == 0) //проверяем, что остаток от деления на два равен нулю list.add(x); //добавление в конец else list.add(0, x); //вставка в начало } } |
- Пример 3:
Удаление всех чисел больше 5: | |
---|---|
public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in) ); ArrayList<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(7); list.add(11); list.add(3); list.add(15); for (int i = 0; i < list.size(); ) //убрали увеличение i внутрь цикла { if (list.get(i) > 5) list.remove(i); //не увеличиваем i, если удалили текущий элемент else i++; } } |
- Пример 4:
Разделение массива на два – чётных и нечётных чисел | |
---|---|
public static void main(String[] args) throws IOException { //статическая инициализация массива int[] data = {1, 5, 6, 11, 3, 15, 7, 8}; //создание списка, где все элементы должны быть типа Integer ArrayList<Integer> list = new ArrayList<Integer>(); //заполнение списка из массива for (int i = 0; i < data.length; i++) list.add(data[i]); ArrayList<Integer> even = new ArrayList<Integer>(); //чётные ArrayList<Integer> odd = new ArrayList<Integer>(); //нечётные for (int i = 0; i < list.size(); i++) { Integer x = list.get(i); if (x % 2 == 0) //если x - чётное even.add(x); // добавляем x в коллекцию четных чисел else odd.add(x); // добавляем x в коллекцию нечетных чисел } } |
- Пример 5:
Слияние списков. | |
---|---|
public static void main(String[] args) throws IOException { ArrayList<Integer> list1 = new ArrayList<Integer>(); //создание списка Collections.addAll(list1, 1, 5, 6, 11, 3, 15, 7, 8); //заполнение списка ArrayList<Integer> list2 = new ArrayList<Integer>(); Collections.addAll(list2, 1, 8, 6, 21, 53, 5, 67, 18); ArrayList<Integer> result = new ArrayList<Integer>(); result.addAll(list1); //добавление всех значений из одного списка в другой result.addAll(list2); for (Integer x : result) //быстрый for по всем элементам, только для коллекций { System.out.println(x); } } |
- Круто. И что Диего даст мне сейчас кучу аналогичных задач, да?
- Ага!
- Наконец-то ты освободился. Устал уже держать в уме твои задачи. Вот тебе ещё парочка, чтобы не расслаблялся:
Задачи |
---|
1. Три массива 1. Введи с клавиатуры 20 чисел, сохрани их в список и рассортируй по трём другим спискам: Число делится на 3 (x%3==0), делится на 2 (x%2==0) и все остальные. Числа, которые делятся на 3 и на 2 одновременно, например 6, попадают в оба списка. 2. Метод printList должен выводить на экран все элементы списка с новой строки. 3. Используя метод printList, выведи эти три списка на экран. Сначала тот, который для x%3, потом тот, который для x%2, потом последний. |
2. Слова в обратном порядке Введи с клавиатуры 5 слов в список строк. Удали 3 - ий элемент списка, и выведи оставшиеся элементы в обратном порядке. |
3. Слово «именно» 1. Создай список из слов «мама», «мыла», «раму». 2. После каждого слова вставь в список строку, содержащую слово «именно». 3. Используя цикл for, вывести результат на экран. Каждый элемент списка с новой строки. |
4. Буква «р» и буква «л» 1. Создай список слов, заполни его самостоятельно. 2. Метод fix() должен: 2.1. удалять из списка строк все слова, содержащие букву «р» 2.2. удваивать все слова содержащие букву «л». 2.3. если слово содержит и букву «р» и букву «л», то оставить это слово без изменений. 2.4. с другими словами ничего не делать. Пример: роза лира лоза Выходные данные: лира лоза лоза |
5. Удвой слова 1. Введи с клавиатуры 10 слов в список строк. 2. Метод doubleValues должен удваивать слова по принципу a,b,c → a,a,b,b,c,c. 3. Используя цикл for, выведи результат на экран, каждое значение с новой строки. |
- Я нашёл мои “замечательные” лекции! Так что сегодня ты станешь обладателем “ценнейшего знания” по массивам и спискам. Вот они:
- Привет, Амиго! Рад, что ты со всем этим справился – ты заслужил награду:
- Здорово, боец!
- Здравия желаю, капитан Бобров!
- У меня для тебя шикарная новость. Вот тебе задания для закрепления полученных навыков. Выполняй их каждый день, и твои навыки будут расти с неимоверной скоростью. Они специально разработаны для выполнения их в Intellij IDEA.
Дополнительные задания для выполнения в Intellij Idea |
---|
1. Вывести числа в обратном порядке Ввести с клавиатуры 10 чисел и заполнить ими список. Используя цикл for вывести их в обратном порядке. |
2. Переставить M первых строк в конец списка Ввести с клавиатуры 2 числа N и M Ввести N строк и заполнить ими список. Переставить M первых строк в конец списка. Вывести список на экран, каждое значение с новой строки. |
3. Максимальное и минимальное числа в массиве Создать массив на 20 чисел. Заполнить его числами с клавиатуры. Найти максимальное и минимальное числа в массиве. Вывести на экран максимальное и минимальное числа через пробел. |
4. Вводить с клавиатуры строки, пока пользователь не введёт строку “end Создать список строк. Ввести строки с клавиатуры и добавить их в список. Вводить с клавиатуры строки, пока пользователь не введёт строку “end”. “end” не учитывать. Вывести строки на экран, каждую с новой строки. |
5. Бум Написать программу, которая ведёт обратный отсчёт с 30 до 0, и в конце выводит на экран текст «Бум!». Программа должна уменьшать число 10 раз в секунду. Для того чтобы вставить в программу задержку, воспользуйся функцией: Thread.sleep(100); //задержка на одну десятую секунды. Пример: 30 29 … 1 0 Бум! |
6. Семья Создай класс Human с полями имя(String), пол(boolean), возраст(int), отец(Human), мать(Human). Создай объекты и заполни их так, чтобы получилось: Два дедушки, две бабушки, отец, мать, трое детей. Вывести объекты на экран. Примечание: Если написать свой метод String toString() в классе Human, то именно он будет использоваться при выводе объекта на экран. Пример вывода: Имя: Аня, пол: женский, возраст: 21, отец: Павел, мать: Катя Имя: Катя, пол: женский, возраст: 55 Имя: Игорь, пол: мужской, возраст: 2, отец: Михаил, мать: Аня |
7. Переставь один модификатор static Переставь один модификатор static, чтобы пример скомпилировался. |
- Те задания были для духов. Для дедушек я добавил бонусные задания повышенной сложности. Только для старослужащих.
Дополнительные задания для выполнения в Intellij Idea |
---|
1. Нужно исправить программу, чтобы компилировалась и работала. Задача: Программа вводит с клавиатуры данные про котов и выводит их на экран. Пример: Cat name is Barsik, age is 6, weight is 5, tail = 22 Cat name is Murka, age is 8, weight is 7, tail = 20 |
2. Нужно добавить в программу новую функциональность. Задача: Программа вводит строки, пока пользователь не введёт пустую строку (нажав enter). Потом она конвертирует строки в верхний регистр (Мама превращается в МАМА) и выводит их на экран. Новая задача: Программа вводит строки, пока пользователь не введёт пустую строку (нажав enter). Потом программа строит новый список. Если в строке чётное число букв, строка удваивается, если нечётное – утраивается. Программа выводит содержимое нового списка на экран. Пример ввода: Кот Коты Я Пример вывода: Кот Кот Кот Коты Коты Я Я Я |
3. Задача по алгоритмам. Задача: Программа вводит с клавиатуры 20 чисел и выводит их в убывающем порядке. |