• Июля 14, 2020, 04:13:24 pm
• Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Новости: Вебинар по выбору IT профессии: http://bit.ly/2S4kcC6

Автор Тема: Java OOP. Богдан. ДЗ  (Прочитано 36369 раз)

Богдан В.

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 2996
    • Просмотр профиля
    • E-mail
Java OOP. Богдан. ДЗ
« : Июня 27, 2016, 02:45:52 pm »
Учебник: Блинов И. Н. Java. Методы программирования (2013)

Сложности задач:
* - легкая.
** - средней сложности.
*** - сложная.

Приоритеты задач:
* - низкий: решить, если есть свободное время.
** - средний: желательно решить.
*** - высокий: решить обязательно.

Лекция 1.

Задачи на повторение (2 на выбор) Сложность: **. Приоритет: *.
1. Блинов. Глава 2. Вариант A. 8. Ввести N чисел с консоли. Среди чисел найти число-палиндром. Если таких чисел больше одного,  найти второе.
Подсказка: разделение ответственностей, каждый независимый функционал выносить в метод. 
2. Блинов. Глава 2. Вариант B. 4.  Ввести число от 1 до 12. Вывести на консоль название месяца, соответствующего данному числу. Осуществить проверку корректности ввода чисел.
3. Блинов. Глава 2. Вариант C. 7. Повернуть матрицу на 90 (180, 270) градусов против часовой стрелки.




Лекция 2.

Rectangle. Сложность: *. Приоритет: ***.
Создать классы:
1. Rectangle (Прямоугольник), содержащий размеры (высоту и ширину), и умеющий подсчитывать свои периметр и площадь.
2. Rectangles (Прямоугольники), содержащий список прямоугольников, умеющий добавлять новые прямоугольники и подсчитывать их суммарную площадь. Подсказка: реализовать на основании ArrayList.
3. Клиентский класс RectangleRunner, демонстрирующий работу предыдущих классов.



Immutable Point, Line. Сложность: *. Приоритет: ***.
Создать классы:
1. Point (Immutable): double x, double y. Methods: getters .
2. Line (Immutable): Point start, Point end. Methods: double getLength( ).
3. Lines: ArrayList<Line> lines. Methods: void add(Line line), double sumLength( ), Line longestLine( ).
4. Клиентский класс LineRunner, демонстрирующий работу предыдущих классов.

Точка и линия должны быть неизменяемыми объектами (Immutable) - все поля final, отсутствуют setters.



Блинов. Глава 3. Вариант А. 5. Сложность: **. Приоритет: **.
Создать классы:
1. Book: id, Название, Автор (ы), Издательство, Год издания, Количество страниц, Цена, Тип переплета.
2. Books: ArrayList<Book> books. Позволяет выполнить поиск:
    a)  список книг заданного автора;
    b)  список книг, выпущенных заданным издательством;
    c)  список книг, выпущенных после заданного года.
3. Клиентский класс BooksRunner, демонстрирующий работу предыдущих классов.

Пример решения подобной задачи: GitHub: Student

Подсказки:
1. Конструктор по-умолчанию.
2. Приватные поля.
3. Геттеры/сеттеры для всех полей Book().




Лекция 3.

Cinema. Сложность: **. Приоритет: ***.
Смоделировать покупку билетов на один сеанс в кинотеатре.
Основные сущности:
1. Movie (фильм): фильм содержит название, год выпуска, длительность, описание.
2. HallForSession (зал кинотеатра для одного сеанса): зал состоит из мест (количество рядов и мест в ряде задается в конструкторе); место имеет 2 состояния: свободное, купленное; объект должен предоставлять функционал покупки билета и должен подсчитывать количество купленных и свободных мест.
3. MovieSession (сеанс): сеанс содержит фильм, зал для сеанса, цену билета, время начала; объект должен уметь подсчитывать итоговые сборы по сеансу.
4. Клиентский класс CinemaRunner, демонстрирующий работу предыдущих классов.



Блинов. Глава 4. Вариант А. 1. Сложность: *. Приоритет: **.
Создать  объект  класса Текст,  используя  классы  Предложение, Слово. Методы: дополнить текст, вывести на консоль текст, заголовок текста.




Лекция 4.

Taxi Tariff Calculator. Сложность: **. Приоритет: ***.
Написать программу, которая подсчитывает стоимость поездок в такси в соответствии с различными тарифами.
Поездка в такси (TaxiRide) включает количество пассажиров (passengers), расстояние в километрах (distance), длительность в минутах (duration).
Есть несколько типов тарифов:
1. Standard Tariff: 30 + 5 * distance + 2 * duration.
2. Family Tariff: 50 + 20 * distance / passengers.
Система должна быть гибкой для добавления новых типов тарифов.
Необходимо реализовать TaxiRides, содержащий множество поездок и умеющий подсчитывать суммарную стоимость всех поездок в соответствии с заданным тарифом.

Подсказка: Необходимо создать интерфейс TaxiTariff с методом long calculatePrice(TaxiRide ride). Каждый конкретный тариф - это реализация данного интерфейса. TaxiRides может содержать метод long getPrice(TaxiTariff tariff).



Блинов. Глава 4. Вариант А. 10. Сложность: *. Приоритет: ***.
Создать  объект  класса Щенок,  используя  классы  ЖивотноеСобака. Методы: вывести на консоль имя, подать голос, прыгать, бегать, кусать.



File System. Сложность: **. Приоритет: **.
Java OOP. Богдан. Файловая система. ДЗ




Лекция 6.

Enum:

Film. Сложность: *. Приоритет: ***.
Создать классы:
1. Film: название, год выпуска, список имен актеров, список жанров.
2. Films: ArrayList<Film> films. Позволяет выполнить поиск:
    a) список фильмов с заданными жанрами (например, HORROR и THRILLER).
    b) список фильмов, выпущенных в заданные года (например, в диапазоне 1990-2000 rr.)
    c) список фильмов, в которых снимаются заданные актеры.
3. Клиентский класс FilmsRunner, демонстрирующий работу предыдущих классов.




Лекция 7.

Generics:

Pair. Сложность: *. Приоритет: ***.
Создать класс Pair<L, R>, хранящий пару значений (L left, R right). Объекты класса Pair должны быть неизменяемые (Immutable). Создать клиентский класс, демонстрирующий работу Pair.

Range. Сложность: **. Приоритет: *.
Создать класс Range<T extends Number & Comparable<T>> (возможно, используя класс Pair<L, R>). Range применяется для хранения промежутка (например, Range<Integer>, Range<Long>). Необходимо осуществлять проверки на корректность диапазона (нижняя граница должна быть не больше, чем верхняя). Объекты класса Range должны быть неизменяемые (Immutable). Создать клиентский класс, демонстрирующий работу Range.



Comparing:

Names Comparing. Сложность: *. Приоритет: ***.
Создать класс Names (List<String> names), который умеет выполнять следующие действия:
1. Отсортировать имена в алфавитном порядке.
2. Отсортировать имена в алфавитном порядке по убыванию.
3. Найти наименьшее имя в алфавитном порядке (использовать метод Collections.min(...)).
4. Отсортировать имена по количеству букв.
5. Отсортировать имена по количеству букв, а в группах, где количество букв одинаковое, - в алфавитном порядке по убыванию.

Person Filtering/Sorting. Сложность: *. Приоритет: **.
Задан List<Person> people. Из исходного списка выбрать всех людей подросткового возраста (age >= 12 && age <= 17); отсортировать по возрасту от старшего к младшему, в группах с одним возрастом - по имени в алфавитном порядке.




Лекция 8.

Iteration:

People with Correct Names. Сложность: *. Приоритет: **.
Задан List<Person> people. Написать метод, удаляющий из списка всех людей, у которых имя null или пустая строка. Для удаления использовать итератор.

List, Queue:

Сложность: ***. Приоритет: *.
Java OOP. Богдан. Коллекции. Списки. ДЗ




Лекция 9.

Set, Map:

Unique Sorted People. Сложность: *. Приоритет: **.
Задан List<Person> people. Вывести людей в алфавитном порядке имен так, чтобы люди с одинаковыми именами не повторялись.
Подсказка: TreeSet.

Age Categories for People. Сложность: **. Приоритет: **.
Задан List<Person> people. Создать класс PersonByAgeFinder, позволяющий быстро выполнять запросы:
1. List<Person> findWithAge(int fromAge, int toAge) - найти всех людей подроствого возраста (от 12 до 17 лет).
2. List<Person> findYongestOlderThan(int age) - найти младшего человека, старше 18 лет.
3. List<Person> findOldestYongerThan(int age) - найти старшего человека, младше 18 лет.
Продемонстрировать работу этих запросов и оценить сложность.
Подсказка: TreeMap.

Numbers Counter. Сложность: *. Приоритет: ***.
Задан List<Integer> list. Посчитать, сколько раз в списке попадается каждое число.
Подсказка: HashMap.




Лекция 10.

Java IO:

Film IO. Сложность: **. Приоритет: **.
Создать классы:
1. Film: название, год выпуска, список имен актеров, список жанров.
2. IOFilms: List<Film> films (возможно, extends Films). Позволяет выполнять запросы:
    a) Запись фильмов в текстовый файл.
    b) Чтение фильмов из текстового файла.
    c) Запись фильмов в бинарный файл (сериализация).
    d) Чтение фильмов из бинарного файла (десериализация).

Пример решения подобной задачи: GitHub: PersonIOUtils (старый код - процедурное решение)




Лекция 11.

Multithreading:

Сложность: *. Приоритет: ***.
Java OOP. Богдан. Факториал и многопоточность. ДЗ
« Последнее редактирование: Декабря 03, 2017, 01:04:20 pm от Богдан В. »

roman.m

  • Пользователи
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #1 : Июня 30, 2016, 10:58:42 pm »
Блинов. Глава 2. Вариант B. 4.
https://github.com/potf/blinov_g2_vB_4

Rectangle (*)
https://github.com/potf/Rectangle

Блинов. Глава 3. Вариант А. 5 (**)
https://github.com/potf/blinov_g3_vA_5

Блинов. Глава 4. Вариант А. 10 (*)
https://github.com/potf/blinov_g4_vA_10
« Последнее редактирование: Июня 30, 2016, 11:57:47 pm от roman.m »

Yurlov

  • Пользователи
  • *
  • Сообщений: 10
    • Просмотр профиля
    • E-mail
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #2 : Июня 30, 2016, 11:48:54 pm »
1. Блинов. Глава 2. Вариант B. 4. Month
https://gist.github.com/Yurlov/23ab1193eaf4648feeb3682779be2abd
2. Блинов. Глава 2. Вариант A. 8. Palindrom - number
https://gist.github.com/Yurlov/92ce192a8619be1a07f482ef23f2f9cf
3. Rectangle
https://gist.github.com/Yurlov/cbfbf4a8e7705c20d6b02eddf112c6aa

Yurlov

  • Пользователи
  • *
  • Сообщений: 10
    • Просмотр профиля
    • E-mail

Yurlov

  • Пользователи
  • *
  • Сообщений: 10
    • Просмотр профиля
    • E-mail
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #4 : Июля 01, 2016, 01:26:21 am »
Блинов. Глава 4. Вариант А. 10 (*)Щенок ( не знаю правильно ли я понял задание )

https://gist.github.com/Yurlov/2aa1cb7d48328929739ac6a77ff93ce6

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 13884
    • Просмотр профиля
    • E-mail
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #5 : Июля 01, 2016, 10:00:36 am »
Roman.m
Верно, но классы какаието бедноватые только свойства ну и конструктор. Дали бы им больше функционала.

Yurlov
Верно

Shao

  • Пользователи
  • *
  • Сообщений: 52
    • ICQ клиент - 233581368
    • Просмотр профиля
    • prog.kiev.ua
    • E-mail
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #6 : Июля 01, 2016, 11:13:38 am »
Лекция 1

Цитировать
Задачи на повторение (2 на выбор)
1. Блинов. Глава 2. Вариант A. 8. Ввести N чисел с консоли. Среди чисел найти число-палиндром. Если таких чисел больше одного,  найти второе.
2. Блинов. Глава 2. Вариант B. 4.  Ввести число от 1 до 12. Вывести на консоль название месяца, соответствующего данному числу. Осуществить проверку корректности ввода чисел.
3. Блинов. Глава 2. Вариант C. 7. Повернуть матрицу на 90 (180, 270) градусов против часовой стрелки.
Rectangle (*). Написать класс Rectangle (Прямоугольник), содержащий размеры (высоту и ширину), и умеющий подсчитывать свои периметр и площадь. Написать клиентский класс RectangleRunner, создающий список прямоугольников и подсчитывающий их суммарную площадь.
1. ShaoPalindrome.java
2. ShaoInt2Month.java
3. ShaoMatrixTurning.java
*. ShaoRectangleRunner.java

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 13884
    • Просмотр профиля
    • E-mail
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #7 : Июля 01, 2016, 01:48:48 pm »
Shao
Верно

Shao

  • Пользователи
  • *
  • Сообщений: 52
    • ICQ клиент - 233581368
    • Просмотр профиля
    • prog.kiev.ua
    • E-mail
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #8 : Июля 01, 2016, 01:58:47 pm »
Лекция 2

Цитировать
Immutable Point, Line (*). Написать классы:
1. Point: int x, int y.
2. Line: Point start, Point end.
Точка и линия должны быть неизменяемыми объектами (Immutable).
Выполнить задачи:
1. Создать список разных линий.
2. Посчитать суммарный размер всех линий.
3. Найти самую длинную линию.

Блинов. Глава 3. Вариант А. 5 (**). Book: id, Название, Автор (ы), Издательство, Год издания, Количество стра-ниц, Цена, Тип переплета.
Создать массив объектов. Вывести:
a)  список книг заданного автора;
b)  список книг, выпущенных заданным издательством;
c)  список книг, выпущенных после заданного года.

Student: id,  Фамилия,  Имя,  Отчество,  Дата  рождения,  Адрес,  Телефон, Факультет, Курс, Группа.
Создать массив объектов. Вывести:
a)  список студентов заданного факультета;
b)  списки студентов для каждого факультета и курса;
c)  список студентов, родившихся после заданного года;
d)  список учебной группы.

Блинов. Глава 4. Вариант А. 10 (*). Создать  объект  класса Щенок,  используя  классы  Животное,  Собака. Методы: вывести на консоль имя, подать голос, прыгать, бегать, кусать.

ShaoImmutable.java
ShaoBook.java
ShaoStudent.java
ShaoPuppy.java

Dyvak

  • Пользователи
  • *
  • Сообщений: 27
    • Просмотр профиля
    • E-mail

Alexander Ts

  • Преподаватели
  • Пользователи
  • *
  • Сообщений: 13884
    • Просмотр профиля
    • E-mail
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #10 : Июля 02, 2016, 12:32:41 am »

Shao
Строки не сравниваються оператором ==. В таком случае он сравнит ссылки а не содержимое.
В остальном верно

Dyvak
Верно

Shao

  • Пользователи
  • *
  • Сообщений: 52
    • ICQ клиент - 233581368
    • Просмотр профиля
    • prog.kiev.ua
    • E-mail
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #11 : Июля 02, 2016, 06:32:57 am »

Shao
Строки не сравниваються оператором ==. В таком случае он сравнит ссылки а не содержимое.
В остальном верно
Аймсори. Домашнюю работу делаю на работе. :) Отвлекли. :) Я помню, что иквалс. Ща поправлю все.

Shao

  • Пользователи
  • *
  • Сообщений: 52
    • ICQ клиент - 233581368
    • Просмотр профиля
    • prog.kiev.ua
    • E-mail
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #12 : Июля 02, 2016, 06:47:49 am »
Правда тогда странно, почему работает программа?
Я вызываю метод void printByFaculty(String faculty) со строковым входящим параметром "FIOT", и в результате все равно выводятся все студенты заданного факультета, хотя в методе идет сравнение указателей,а не содержимого.

Shao

  • Пользователи
  • *
  • Сообщений: 52
    • ICQ клиент - 233581368
    • Просмотр профиля
    • prog.kiev.ua
    • E-mail
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #13 : Июля 02, 2016, 07:04:26 am »
Я провел исследование и получается, что если сравнивать оператором == две ссылки, то сравниваются адреса, но если сравнивать ссылку и сразу строку "" или результат метода, который возвращает строку, то сравнивается содержимое.
public class test4 {
    public static void main(String[] args) {
        String s1="123";
        String s2="456";
        System.out.println(s1==s2);
        System.out.println(s1=="123");
        System.out.println(s2==returnString());
    }
    static String returnString() {
        return "456";
    }
}

Shao

  • Пользователи
  • *
  • Сообщений: 52
    • ICQ клиент - 233581368
    • Просмотр профиля
    • prog.kiev.ua
    • E-mail
Re: Java OOP. Богдан. Группы 29-30. Лекции 1-2. ДЗ
« Ответ #14 : Июля 02, 2016, 07:08:56 am »
Стоп машина. Немного не так сделал.
У нас имеется две строковых переменных.
Записываем в них одну и ту же строку.
Сравниваем оператором == и результат true.  :-\
public class test4 {
    public static void main(String[] args) {
        String s1="123";
        String s2="123";
        System.out.println(s1==s2);
        System.out.println(s1=="123");
        System.out.println(s2==returnString());
    }
    static String returnString() {
        return "123";
    }
}