Упражнения за извънаудиторна заетост
Задачите са подредени по нарастваща сложност. В първите задачи са зададени конкретни имена на класове, полета и методи. В следващите задачи част от решенията трябва да бъдат избрани самостоятелно.
Задача 1
Да се дефинира клас Cat, който описва котка.
Класът трябва да съдържа следните полета:
nameот типString;breedот типString;ageот типint;weightот типdouble.
За всяко поле трябва да се дефинират методи за четене и промяна на стойността:
getName()иsetName(String name);getBreed()иsetBreed(String breed);getAge()иsetAge(int age);getWeight()иsetWeight(double weight).
Да се създаде клас Application с метод main. В него да се създаде обект от класа Cat, да се зададат стойности чрез set методите и да се отпечатат стойностите чрез get методите.
Пример за използване:
Cat cat = new Cat();
cat.setName("Maya");
cat.setBreed("Persian");
cat.setAge(3);
cat.setWeight(4.2);
System.out.println(cat.getName());
System.out.println(cat.getBreed());
System.out.println(cat.getAge());
System.out.println(cat.getWeight());
Задача 2
Да се дефинира клас Room, който описва стая.
Класът трябва да съдържа следните полета:
numberот типString;lengthот типdouble;widthот типdouble;heightот типdouble.
Обектите от класа Room трябва да се инициализират чрез параметризиран конструктор:
Room(String number, double length, double width, double height)
Да се дефинират само методи за четене:
getNumber();getLength();getWidth();getHeight().
Не трябва да се дефинират методи за промяна на стойностите. Така стойностите се задават при създаване на обекта и след това се четат чрез методи.
Да се създадат два обекта от класа Room и да се отпечатат данните за всяка стая.
Пример за създаване на обект:
Room room = new Room("A101", 6.0, 4.0, 3.0);
Задача 3
Да се разшири решението от задача 2 или да се дефинира нов клас Room, който освен полетата от задача 2 съдържа и методи за изчисления.
Да се реализират следните методи:
calculateArea(), който връща площта на пода;calculateVolume(), който връща обема на стаята;getDescription(), който връща текстово описание на стаята.
Площта на пода се изчислява чрез length * width. Обемът се изчислява чрез length * width * height.
Пример за очаквано използване:
Room room = new Room("B202", 5.0, 4.0, 2.8);
System.out.println(room.calculateArea());
System.out.println(room.calculateVolume());
System.out.println(room.getDescription());
Методът getDescription() трябва да върне текст, който съдържа номера на стаята, площта и обема.
Задача 4
Да се дефинира клас House, който описва къща.
Класът трябва да съдържа поне следните полета:
addressот типString;floorsот типint;areaот типdouble;hasGarageот типboolean.
Обектите трябва да се инициализират чрез параметризиран конструктор. Да се дефинират методи за четене на стойностите.
Да се реализират и следните методи:
getDescription(), който връща текстово описание на къщата;isLargerThan(House other), който връщаtrue, ако текущата къща има по-голяма площ от подадената къща;hasMoreFloorsThan(House other), който връщаtrue, ако текущата къща има повече етажи от подадената къща.
Да се създадат поне два обекта от класа House. Да се отпечатат описанията им и да се сравнят по площ и брой етажи.
Задача 5
Да се дефинира клас Student, който описва студент.
Класът трябва да съдържа:
- нестатично поле
nameот типString; - нестатично поле
facultyNumberот типint; - статично поле
universityот типString.
Да се дефинира параметризиран конструктор:
Student(String name, int facultyNumber)
Да се дефинира метод getInformation(), който връща текст с името, факултетния номер и университета.
Да се създадат поне три обекта от класа Student. Да се отпечатат данните за тях чрез getInformation(). След това да се промени стойността на статичното поле university чрез името на класа и отново да се отпечатат данните.
Пример:
Student.university = "Technical University of Varna";
Целта е да се покаже, че статичното поле принадлежи на класа и е общо за всички обекти.
Задача 6
Да се дефинира record с име Book, който съхранява данни за книга.
Записът трябва да съдържа следните компоненти:
titleот типString;authorот типString;yearот типint;priceот типdouble.
Да се създадат поне два обекта от тип Book. Да се използват автоматично генерираните методи:
title();author();year();price();toString();equals(Object other).
Да се провери какъв е резултатът от equals(), когато две книги имат еднакви стойности, и когато поне една стойност е различна.
Да се добави проверка в компактен конструктор, която не позволява създаване на книга с отрицателна цена.
Задача 7
Да се дефинира enum с име OrderStatus, който описва статус на поръчка.
Изброеният тип трябва да съдържа поне следните стойности:
NEW;PAID;SHIPPED;DELIVERED;CANCELLED.
Да се дефинира клас Order, който описва поръчка. Задължително трябва да има поле за статус от тип OrderStatus. Останалите полета трябва да бъдат избрани самостоятелно според това какви данни са необходими за една поръчка.
Класът Order трябва да съдържа:
- параметризиран конструктор;
- методи за четене на полетата;
- метод
getDescription(), който връща текстово описание на поръчката; - метод
changeStatus(OrderStatus status), който променя текущия статус на поръчката.
Да се създадат няколко поръчки с различни статуси. Да се използват условни оператори за проверка дали дадена поръчка е доставена, отказана или все още се обработва.
Задача 8
Да се дефинира клас по избор, който описва реален обект от учебна, търговска или битова система. Примери за възможни класове са Course, Product, Vehicle, BankAccount или HotelReservation.
За избрания клас трябва самостоятелно да се определят:
- име на класа;
- поне четири полета с подходящи типове;
- кои стойности трябва да се задават чрез конструктор;
- кои методи за четене са необходими;
- дали са необходими методи за промяна;
- поне два метода, които извършват изчисление, проверка или връщат текстово описание.
Да се използва поне една от ключовите думи this или static по смислен начин.
Да се създаде примерна програма, която създава поне три обекта от избрания клас и демонстрира всички дефинирани методи.