Вы достигли нового уровня

Уровень 5

Как понять, что я смогу?

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

Когда я вижу друзей, которые вкалывают в два раза больше, а зарабатывают в четыре раза меньше, каждый раз начинается разговор:

— А ты бы не хотел поработать программистом? Ты же реально умный. Может ты просто не на своём месте?

Почему программирование?

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

1 Простая и интересная работа.

Программирование — это простая и интересная работа. Большой простор для творчества. Мне очень нравится. Поначалу я шалел от мысли – я делаю то, что мне нравится, а мне за это ещё и деньги платят. Потом привык.

2 Хорошо оплачивается.

Мне просто приятно видеть, как мои друзья через 5 лет работы начали покупать себе машины или дома.

3 Гибкий график.

Жёсткий график — это неприятно. Это вам подтвердит каждый, кто стоял в пробке в час пик, или кого штрафовали за опоздание в 5 минут. А как насчёт возможности приходить на работу в 11 утра, а уходить в 5? Скажете мечта? Для большинства программистов это реальность. Справляйтесь со своей работой, и вам слова никто не скажет. Во многих компаниях вы можете даже не приходить на работу, а работать из дома. Всегда можно договориться.

4 Профессиональный рост.

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

5 Высокая международная мобильность.

Три самых высокооплачиваемых специальности во всем мире: юрист, хирург/врач и программист. Юристом очень сложно работать заграницей: другие законы, прецедентное право и т.д. Врачу нужно учить язык, другие медицинские стандарты, а так же заново сдавать экзамены. Программисту ничего учить не придётся. Тот же язык. Те же стандарты. Часто даже заказчики те же.

Почему именно Java?

Совокупность трёх следующих факторов и заставила меня переучивать людей на джавистов.

1. Java — один из самых лёгких языков для изучения

Человек после школы может научиться за 3-6 месяцев, в зависимости от базы и того, сколько часов в день он уделяет учебе.

2. Большой спрос на рынке труда.

Можно устроиться на работу без опыта. Фирмы охотно берут на работу толковых новичков и занимаются их дальнейшим обучением.

3. Самые высокие зарплаты по отрасли.

Одни из самых высоких. Особенно актуально для начинающих программистов.

Нельзя прочитать книгу и стать программистом. Тут надо минимум 500 часов практики. Прямо как в боксе. Нельзя просто пересмотреть все бои и стать профессионалом. Вам надо проводить за тренировками в зале долгие вечера. (Поэтому в JavaRush очень много практических заданий).

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

Иногда, на форумах, когда новичок спрашивает, как стать программистом, ему говорят – придумай себе задания и выполняй их. Так не получится. Дело в том, что человек не может придумать себе задание, которое лежит сразу за гранью его знаний. Вы что-то либо знаете, либо нет.

Только человек, который хорошо знает тему, может придумать для вас последовательный набор задач, каждая из которых учила бы вас чему-то новому и не требовала недели на разбор. Что собственно я и сделал.

Новый инновационный подход к обучению

Обучение в JavaRush построено не так, как вузе. Это вы быстро заметите. Зато оно эффективнее.

В вузе вы, скорее всего, учились по такому типу: длинные лекции и практика, которая их закрепляет. Этот подход направлен на то, чтобы дать вам очень обширные знания. Но ваши реальные практические навыки при этом оставляют желать лучшего. А если быть честным, то вы практически ничего стоящего не умеете при таком обучении.

У меня другой подход. Я считаю, что теория – это знания, а знания – это ответы на наши вопросы. Поэтому я сначала даю вам вопросы - практические задания, которые трудно решать с текущими знаниями, а затем даю ответы (теорию, которая позволяет решать их гораздо легче.

Новый материал я даю в три этапа:

1) Знакомство (Даю самый минимум теории или несколько практических заданий)

2) Основной блок знаний (Вы должны полностью понять, о чем речь)

3) Детали и нюансы работы (Заполняю пробелы)

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

Некоторые студенты даже возмущаются насчет задач, дескать, мы этого еще не проходили. Такие задачи повод задуматься: как можно их решить с текущим набором знаний? Вы потратите час-другой на эти задачи, зато потом с радостью встретите новый оригинальный подход или красивое решение.

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



Получи доступ ко всем уровням и прокачивай свои навыки. Нельзя стать программистом не программируя. А быть программистом - это реально круто!

1. Классы

- Привет, Амиго!

- Привет, Элли!

- Сегодня я подробно расскажу тебе, что такое классы.

- Объяснение номер 1. Начну с аналогии. Все вещи в физическом мире состоят из атомов. Атомы могут быть разных типов: водород, кислород, железо, уран, ... Комбинируя такие атомы можно создавать различные молекулы, вещества и предметы.

- Атомы в свою очередь тоже имеют некоторую внутреннюю структуру. Внутри них содержаться электроны и ядро: протоны и нейтроны.

- Да, я имею общее представление об устройстве атомов. Я же робот.

- Так вот, в мире Java все очень похоже. Программы состоят из объектов, которые бывают разных типов (классов). Различные классы в свою очередь имеют различную внутреннюю структуры: переменные и методы.

- Если рассмотреть программу в целом, то объекты – это блоки, из которых состоит программа. А классы – это типы этих блоков. Блоки разных типов являются объектами разных классов.

- Вроде ясно.

- Объяснение номер 2. Когда нам нужен новый тип объектов, мы создаем новый класс, и внутри него описываем нужное нам поведение этих объектов.

- Что-то как-то уж слишком размыто это звучит. Вроде и понятно, но ничего конкретного.

- С точки зрения внутренней структуры, класс состоит из методов класса, которые что-то делают и переменных класса, в которых эти методы хранят различные данные.

- Т.е. если очень просто, то класс – это набор методов?

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

- Ага. И чтобы создать новый класс нам нужно написать эти методы…

- Да. А также решить, какие общие переменные есть у различных методов, и вынести эти переменные из метода в класс: сделать переменные метода переменными класса.

- Создание класса происходит примерно по такой схеме:

1 Программист решает, какие еще объекты ему нужны.

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

3 Для каждого типа программист пишет свой отдельный класс.

4 В классе он объявляет нужные методы и переменные.

5 В каждом методе пишутся команды, чтобы метод делал то, что хочет от него программист.

6 Класс готов, можно создавать его объекты.

- Круто! Интересная схема. Надо будет запомнить

- Запоминай – пригодится. Подход к программированию, при котором программа разбивается на объекты, называется «Объектно-Ориентированное Программирование (ООП)».

- Java – это классический пример ООП подхода: в Java объектами является всё.

- Изучение Java состоит из двух больших задач: учимся писать свои классы, учимся использовать чужие классы. Сегодня мы начнем с самого простого. Будем учиться писать простенькие классы и, конечно, создавать их объекты. Объекты часто еще называют экземплярами классов. Это синонимы: правильно и так и так.

- Понятно.

- Если подытожить всё, что я сказала, то можно сказать, что класс – это мини программа: набор данных и функции, которые что-то с этими данными делают. Важной особенностью классов является возможность создавать экземпляры этих классов – объекты.

- Для того, чтобы создать объект класса, в коде надо написать «new имя_класса()». Примеры:

Примеры
Cat cat = new Cat();
Reader reader = new BufferedReader(new InputStreamReader(System.in));
InputStream is = new FileInputStream(path);

- У объекта класса есть две интересные особенности:

- Первая. Каждый объект класса хранит свою собственную копию переменных класса. Т.е. если в классе объявлены переменные «x,y» и создано 10 объектов такого класса, то в каждом объекте будут свои переменные. Изменение переменных одного объекта не влияет на переменные другого объекта.

- Вторая. При создании объекта, в него можно предавать различные параметры. Это так называемые «стартовые значения». Это почти как дать имя при рождении. Многие объекты не могут быть созданы, если в них не передать такие параметры.

- Немного понятно. А что ты говорила про переменные класса?

- У каждого объекта есть его копия данных – переменных класса.

Java Вывод на экран:
Cat cat1 = new Cat();
cat1.name = "Vaska";

Cat cat2 = new Cat();
cat2.name = "Mashka";

System.out.println(cat1.name);
System.out.println(cat2.name);
Vaska
Mashka

2. Пакеты (packages)

- Привет, Амиго! Сегодня я расскажу тебе про пакеты.

- Файлы в компьютере группируются по папкам. Классы в Java (а каждый класс лежит в отдельном файле) группируются по пакетам, которые являются папками на диске. Ничего принципиально нового. Но есть два замечания

- Первое. «Полным уникальным именем класса» является «имя пакета» + «имя класса». Примеры:

Полное уникальное имя Имя пакета Имя класса
java.io.FileInputStream java.io FileInputStream
java.lang.String java.lang String
java.util.ArrayList java.util ArrayList
org.apache.tomcat.Servlet org.apache.tomcat Servlet
Cat отсутствует Cat

- Полное имя класса всегда уникально!

- Каждый раз писать длинное имя, например java.util.ArrayList, очень неудобно. Поэтому в Java добавили возможность «импортировать классы». В своем коде ты можешь пользоваться коротким именем других классов, но ты должен в начале своего класса явно указать, какой именно класс будет использоваться.

- А как это сделать?

- Делается это конструкцией вида «import java.util.ArrayList;»

- В начале класса, сразу после объявления package, ты можешь указать какой именно класс скрывается за ArrayList, который ты используешь у себя в коде.

- Зачем такая сложность? Что могут быть классы с одинаковыми именами?

- Да, в разных пакетах могут лежать классы с одинаковыми именами. Но мы не можем импортировать в наш класс два класса с одинаковыми именами, поэтому к одному из них придётся обращаться по полному имени.

- Вот еще одна аналогия. У тебя в коллективе есть Серега и никаких проблем с общением – все знают кто это. Но если бы их было трое, то чтобы их различать пришлось бы использовать полные уникальные имена.


- Второе. Лучше всегда класть классы в пакеты, а не в корень папки src. Когда классов мало, это ещё не представляет проблему, но когда классов много – очень легко запутаться. Поэтому всегда создавай классы только в пакетах.

В Java принято давать классам и пакетам осмысленные имена. Многие компании выпускают свои библиотеки (набор классов) и, чтобы не было путаницы, называют пакеты этих классов по имени компании/сайта:

Имя пакета Имя компании/проекта
org.apache.common
org.apache.tomcat
org.apache.util
Проект «Апач»
com.oracle.jdbc Компания «Oracle»
java.io
javax.servlet
Компания Sun, проект Java
com.ibm.websphere Компания «IBM», проект WebSphere
com.jboss Проект «Jboss»

3. Видео уроки по созданию классов и пакетов

- Привет, Амиго! Вот пара видео уроков, как нужно создавать классы и пакеты:

http://www.youtube.com/watch?v=37Cl0Q4KddM

- Мы же уже делали это!

- Делали, вот и отлично. Повторение – мать учения. Вот тебе ещё пара ссылок:

Создание Java классов

Создание пакетов

4. Создание объектов, ссылки на объекты

- Так. С классами мы разобрались в прошлый раз. Сегодня я хочу рассказать тебе, как создавать объекты. Это очень просто: пишем ключевое слово new и имя класса, объект которого хотим создать:

Пример
Cat cat = new Cat();
Reader reader = new BufferedReader(new InputStreamReader((System.in)));
InputStream is = new FileInputStream(path);

- Так я это уже слышал.

- Я знаю, поэтому слушай дальше.

- При создании объекта в скобочках можно передавать различные параметры. Об этом я расскажу сегодня, но чуть попозже. Давай рассмотрим класс Cat:

Код Описание
class Cat {
    public String name;
name – это переменная класса. У нее модификатор доступа public, поэтому она видна везде в проекте.
   public String getName() {
        return name;
    }
Метод getName – это getter (произносится гЭттэр), т.е. он возвращает значение переменной-класса name. Имя метода строится по принципу get + «имя переменной с большой буквы».
    public void setName(String name) {
        this.name = name;
    }
}
Метод setName – это setter (произносится сЭттэр), т.е. он используется для присваивания нового значения переменной-класса name. Имя метода строится по принципу set + «имя переменной с большой буквы». В этом методе имя параметра совпадает с именем переменной класса, поэтому мы ставим this перед именем переменной.

- А это что еще за геттеры и сеттеры такие?

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

- Чтобы другие классы могли менять значения таких переменных, для каждой из них создается пара методов: get и set. Задача метода get вернуть текущее значение переменной тому, кто его вызвал. Задача метода set установить новое значение переменной.

- А в чем смысл?

- Если мы не хотим, чтобы кто-то менял значения переменных наших объектов, мы можем просто не писать метод set для него, или сделать его private. Также в этот метод можно добавить дополнительные проверки данных. И если переданное новое значение неверно, то ничего не менять.

-Ясно.

- Т.к. переменных в классе может быть много, то методы get и set обычно имеют в своем имени имя той переменной, с которой работают.

- Если переменная называется name, то методы setName и getName. И т.д. по аналогии.

- Ясно. Понятный, в общем-то, подход.

- Вот тебе еще пара примеров работы с новосозданным объектом:

ШагКодОписание
1 new Cat(); Создаём объект типа Cat
2 Cat catVaska = new Cat(); Сохраняем объект в переменную catVaska с типом Cat
3 catVaska.name = "Vaska";
catVaska.age = 6;
catVaska.weight = 4;
Заполняем объект данными: имя, возраст, вес
4 catVaska.sleep(); Вызываем метод объекта
5 catVaska.fight(catBarsik); Взаимодействие объектов.

5. Задачи на создание своих классов и объектов

- Привет, Амиго! Вот тебе несколько задачек на создание классов и объектов:

Задачи
1. Создать класс Cat

Создать класс Cat. У кота должно быть имя (name, String), возраст (age, int), вес (weight, int), сила (strength, int).
2. Реализовать метод fight

Реализовать метод boolean fight(Cat anotherCat): реализовать механизм драки котов в зависимости от их веса, возраста и силы. Зависимость придумать самому. Метод должен определять, выиграли ли мы (this) бой или нет, т.е. возвращать true, если выиграли и false - если нет.
Должно выполняться условие:
если cat1.fight(cat2) == true , то cat2.fight(cat1) == false
3. Геттеры и сеттеры для класса Dog

Создать class Dog. У собаки должна быть кличка String name и возраст int age.
Создайте геттеры и сеттеры для всех переменных класса Dog.
4. Создать три объекта типа Cat

В методе main создать три объекта типа Cat и заполнить их данными. Использовать класс Cat из первой задачи. Класс Cat создавать не надо.
5. Провести три боя попарно между котами

Создать три кота используя класс Cat.
Провести три боя попарно между котами.
Класс Cat создавать не надо. Для боя использовать метод boolean fight(Cat anotherCat).
Результат каждого боя вывести на экран.

6. Инициализация объектов, метод Initialize

- Хочу рассказать тебе об инициализации объектов. Когда объект создаётся – его переменным нужно присвоить стартовые данные. Чтобы не было ситуаций, когда ты обращаешься к объекту, а внутри у него нет нужной ему информации для правильной работы.

- Рассмотрим для примера объект типа File (файл). Минимальной необходимой информацией для файла является его имя. Создать файл без имени – это бессмыслица.

- Допустим, мы пишем свой класс для работы с файлами - MyFile, какая информация нужна каждому объекту этого класса?

- Имя файла, с которым этот объект будет работать?

- Правильно. Для этого добавим в наш класс метод initialize(). Это будет выглядеть примерно так:

Пример:
class MyFile
{
    private String filename = null;

    public void initialize(String name)
    {
        this.filename = name;
    }
…
}

- Мы добавили метод initialize, чтобы с объектом можно было работать – вызывать его методы. Это можно делать сразу после вызова метода initialize. Если с объектом работать нельзя, его называют невалидным (invalid), если можно – валидным (valid). Основная задача метода initialize – передать в объект все необходимые данные, чтобы сделать его валидным.

- Ясно.

- Теперь усложним задачу. Вернее упростим. Как посмотреть. Представим, что другому программисту, который будет использовать наш класс, удобнее передавать в него не полное имя файла, а директорию и короткое имя файла. Мы бы смогли реализовать эту функциональность с помощью ещё одного метода initialize (Java позволяет создавать несколько методов с одинаковыми именами). Тогда наш класс стал бы выглядеть так:

Пример с двумя методами initialize
class MyFile
{
    private String filename = null;
    public void initialize(String name)
    {
        this.filename = name;
    }

    public void initialize(String folder, String name)
    {
        this.filename = folder + name;
    }

…
}

- А ещё, часто нужно создать временную копию файла рядом с текущим.

- Мы можем сделать метод для этого случая?

- Конечно, вот смотри:

Создание файла рядом с текущим файлом:
class MyFile
{
    private String filename = null;
    public void initialize(String name)
    {
        this.filename = name;
    }

    public void initialize(String folder, String name)
    {
        this.filename = folder + name;
    }

    // Файл filename будет находиться в той же директории, что и file.
    public void initialize(MyFile file, String name) 
    {       
        this.filename = file.getFolder() + name;
    }

…
}

- И что, я могу сделать таких методов сколько угодно?

- Разумные пределы, конечно, есть. Но, в принципе, да, сколько угодно.

- А когда надо вызывать метод initialize?

- Сразу после создания объекта, чтобы перевести его в валидное состояние:

Примеры
MyFile file = new MyFile();
file.initialize("c:\\data\\a.txt");

String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\\data\\", "a.txt");

String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\\data\\a.txt");

MyFile file2 = new MyFile();
file2.initialize("a.txt");

String text = file2.readText();

- А что ещё за метод getFolder()?

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

7. Задачи по инициализации объектов

- Привет, Амиго! Я уже заскучал без наших уроков. Вот тебе пара задачек на инициализацию объектов:

Задачи
1. Создать класс Friend

Создать класс Friend (друг) с тремя инициализаторами (тремя методами initialize):
- Имя
- Имя, возраст
- Имя, возраст, пол
2. Создать класс Cat

Создать класс Cat (кот) с пятью инициализаторами:
- Имя
- Имя, вес, возраст
- Имя, возраст (вес стандартный)
- вес, цвет, (имя, адрес и возраст неизвестны, это бездомный кот)
- вес, цвет, адрес (чужой домашний кот)

Задача инициализатора – сделать объект валидным. Например, если вес неизвестен, то нужно указать какой-нибудь средний вес. Кот не может ничего не весить. То же касательно возраста. А вот имени может и не быть (null). То же касается адреса: null.
3. Создать класс Dog

Создать класс Dog (собака) с тремя инициализаторами:
- Имя
- Имя, рост
- Имя, рост, цвет
4. Создать класс Circle

Создать класс (Circle) круг, с тремя инициализаторами:
- centerX, centerY, radius
- centerX, centerY, radius, width
- centerX, centerY, radius, width, color
5. Создать класс прямоугольник (Rectangle)

Создать класс прямоугольник (Rectangle). Его данными будут top, left, width, height (левая координата, верхняя, ширина и высота). Создать для него как можно больше методов initialize(…)

Примеры:
- заданы 4 параметра: left, top, width, height
- ширина/высота не задана (оба равны 0)
- высота не задана (равно ширине) создаём квадрат
- создаём копию другого прямоугольника (он и передаётся в параметрах)

8. Конструкторы

- Самое время рассказать тебе о конструкторах. Всё очень просто: программисты придумали сокращённую запись создания и инициализации объекта:

Без использования конструктора С использованием конструктора
MyFile file = new MyFile();
file.initialize("c:\\data\\a.txt");
String text = file.readText();
MyFile file = new MyFile("c:\\data\\a.txt");
String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\\data\\", "a.txt");
String text = file.readText();
MyFile file = new MyFile("c:\\data\\", "a.txt");
String text = file.readText();
MyFile file = new MyFile();
file.initialize("c:\\data\\a.txt");

MyFile file2 = new MyFile();
file2.initialize( file, "a.txt");
String text = file2.readText();
MyFile file = new MyFile("c:\\data\\a.txt");


MyFile file2 = new MyFile(file, "a.txt");
String text = file2.readText();

- А я только с initialize закончил разбираться…

- А ты внимательнее посмотри. Использование конструкторов удобнее и компактнее.

- Так компактнее, да. Но есть вопрос: как написать в классе метод initialize я знаю, а как внутри класса написать конструктор?

- Посмотри сначала на небольшой пример:

Без использования конструктора С использованием конструктора
class MyFile
{
  private String filename = null;

  public void initialize(String name)
  {
    this.filename = name;
  }

  public void initialize(String folder, String name)
  {
    this.filename = folder + name;
  }

  public void initialize(MyFile file, String name)
  {
    this.filename = file.getFolder() + name;
  }

…
}
class MyFile
{
  private String filename = null;

  public MyFile(String name)
  {
    this.filename = name;
  }

  public MyFile(String folder, String name)
  {
    this.filename = folder + name;
  }

  public MyFile(MyFile file, String name)
  {
    this.filename = file.getFolder() + name;
  }

…
}

- Объявить конструктор в классе очень легко. Конструктор - это тот же метод initialize, но с двумя отличиями:

а) Имя метода-конструктора совпадает с именем класса (вместо initialize).

б) У метода-конструктора нет типа (никакой тип не указывается вообще).

- Фактически тот же метод initialize, но с небольшими отличиями. Вроде понятно.

9. Задачи на конструкторы

- Смотрю, ты уже отдохнул. Отлично. Вот тебе пара задачек на создание конструкторов:

Задачи
1. Создать класс Friend

Создать класс Friend (друг) с тремя конструкторами:
- Имя
- Имя, возраст
- Имя, возраст, пол
2. Создать класс Cat

Создать класс Cat (кот) с пятью конструкторами:
- Имя,
- Имя, вес, возраст
- Имя, возраст (вес стандартный)
- вес, цвет, (имя, адрес и возраст – неизвестные. Кот - бездомный)
- вес, цвет, адрес ( чужой домашний кот)

Задача конструктора – сделать объект валидным. Например, если вес не известен, то нужно указать какой-нибудь средний вес. Кот не может ничего не весить. То же касательно возраста. А вот имени может и не быть (null). То же касается адреса: null.
3. Создать класс Dog

Создать класс Dog (собака) с тремя конструкторами:
- Имя
- Имя, рост
- Имя, рост, цвет
4. Создать класс Circle

Создать класс (Circle) круг, с тремя конструкторами:
- centerX, centerY, radius
- centerX, centerY, radius, width
- centerX, centerY, radius, width, color
5. Создать класс прямоугольник (Rectangle)

Создать класс прямоугольник (Rectangle). Его данными будут top, left, width, height (левая координата, верхняя, ширина и высота). Создать для него как можно больше конструкторов:

Примеры:
- заданы 4 параметра: left, top, width, height
- ширина/высота не задана (оба равны 0)
- высота не задана (равно ширине) создаём квадрат
- создаём копию другого прямоугольника (он и передаётся в параметрах)

10. Лекция про классы и конструкторы, статику и видимость объектов

- А вот и снова я. Наши лекции просто великолепны. Ссылок на нудные лекции я тебе давать не буду. Вот тебе ссылка на превосходный материал!

- Ты ещё здесь? Иди же быстрее, читай, а мне нужно в лабораторию.

Дополнительный материал для 5го уровня

11. Хулио

- Привет, Амиго! Я немного устал, давай немного отдохнём, а потом приступим к занятиям. Я тут нашёл отличное видео, как тебе?

Оригинал видео на YouTube

12. Джон

- Здорово, боец!

- Здравия желаю, капитан Бобров!

- У меня для тебя шикарная новость. Вот тебе задания для закрепления полученных навыков. Выполняй их каждый день, и твои навыки будут расти с неимоверной скоростью. Они специально разработаны для выполнения их в Intellij IDEA.

Дополнительные задания для выполнения в Intellij Idea
1. Три класса

По аналогии с классом Duck(утка) создай классы Cat(кошка) и Dog(собака).
Подумай, что должен возвращать метод toString в классах Cat и Dog?
В методе main создай по два объекта каждого класса и выведи их на экран.
Объекты класса Duck уже созданы и выводятся на экран.
2. Man and Woman

1. Внутри класса Solution создай public static классы Man и Woman.
2. У классов должны быть поля: name(String), age(int), address(String).
3. Создай конструкторы, в которые передаются все возможные параметры.
4. Создай по два объекта каждого класса со всеми данными, используя конструктор.
5. Объекты выведи на экран в таком формате [name + " " + age + " " + address].
3. Создай public static классы Dog, Cat.

Добавь по три поля в каждый класс, на твой выбор.
Создай объекты для героев мультика Том и Джерри. Так много, как только вспомнишь.

Пример:
Mouse jerryMouse = new Mouse(“Jerry”, 12 (высота, см) , 5 (длина хвоста, см))
4. Вывести на экран сегодняшнюю дату

Вывести на экран текущую дату в аналогичном виде «21 06 2015».
5. Вводить с клавиатуры числа и считать их сумму

Вводить с клавиатуры числа и считать их сумму, пока пользователь не введёт слово «сумма». Вывести на экран полученную сумму.

- Те задания были для духов. Для дедушек я добавил бонусные задания повышенной сложности. Только для старослужащих.

1. Нужно исправить программу, чтобы компилировалась и работала.

Задача: Программа вводит два числа с клавиатуры и выводит их сумму на экран.
2. Нужно добавить в программу новую функциональность.

Старая Задача: Программа вводит два числа с клавиатуры и выводит минимальное из них на экран.
Новая задача: Программа вводит пять чисел с клавиатуры и выводит минимальное из них на экран.
3. Задача по алгоритмам.

Задача: Написать программу, которая:
1. вводит с консоли число N > 0
2. потом вводит N чисел с консоли
3. выводит на экран максимальное из введенных N чисел.