Категория ‘ПИК3 Java’
* Упражнение 10, 2015 – добавка
Публикувано на 01 декември 2015 в раздел ПИК3 Java.
Тук представям разширен вариант на задачата от упражнение 10. На практика са решени всички поставени допълнителни задачи. Кода на много места може да се изчисти и да стане по-лесно четим, но се надявам и така да е достатъчно разбираем. Вмъкнати са следните допълнителни функционалности, които подобряват предишната задача:
- GPOffice вече е самостоятелен клас;
- Създаден е клас Report. При всяко посещение в стая с лекар за пациента се изготвя доклад за извършената дейност. После обратно в GPOffice докладите се сливат в един общ (метод mergeWith). За целта е променена логиката на метод nextPatient() – вече връща доклад за следващия пациент;
- Няма хвърляне на изключения и не се утежняваме с try-catch блокове;
- MedicalRoom и HospitalRoom вече са наследници на клас Room, с което структурата им става по-ясна;
- Вече можете да вкарвате всякакви диагнози на пациенти, а не само предварително дефинираните. В MedicalRoom и HospitalRoom ще бъдат лекувани само тези болести, които са възможни (possibleCures), а непознатите няма да бъдат разглеждани;
- Две болести (Diagnosis) приемаме за еднакви, ако имената им съвпадат – не обръщаме внимание на цените. Тоест ако даден пациент е болен от болест A и си мисли, че тя струва X лева, това не значи, че в болницата ще му струва толкова – може да е по-евтино или по-скъпо. Реализирано е по този начин, защото се стремих да намаля количеството код. Реално в масива с болести на пациента (sicknesses) не е нужно да се пази цената, а само името на болестта, но в случая преизползвах вече готовия клас (което следва и по наследство от решението на оригиналната задача);
- Двама пациента приемаме за еднакви, ако са с едно и също име и ЕГН. Заболяванията им и болестите им не се взимат под внимание при сравнение на обекти;
- GPOffice няма опашка с пациенти – такива има само при MedicalRoom и HospitalRoom. За опашката пред GPOffice се грижи main метода;
- Пазим дълга (debt) на пациентите на две места – веднъж в репорта му в GPOffice и веднъж в статичния ArrayList debtors. За конкретната програма не е необходимо това дублиране на информация, но го запазих заради продължението от предишната задача.
Решение: Прочети още…
* Изходен код от упражнение 10, 2015
Публикувано на 29 ноември 2015 в раздел ПИК3 Java.
В това упражнение продължаваме задачата от уражнение 9. Ще я разширим и ще поправим някои нарочно допуснати в миналия час грешки. Вземете сорс кода от упражнение 9 и променете основния клас да е с име Upr10. Прочети още…
* Изходен код от упражнение 9, 2015
Публикувано на 20 ноември 2015 в раздел ПИК3 Java.
В това упражнение се разглеждат структури от данни. Използват се ArrayList, LinkedList и HashMap. Прочети още…
* Изброим тип (enum) в Java
Публикувано на 19 ноември 2015 в раздел ПИК3 Java.
Както повечето други езици, и в Java присъства изброим тип. Чрез него можем да създаваме собствени типове данни – такива с предварително предефинирани стойности. Реално зад ключовата дума „enum“ стои реализиран клас, т.е. изброимите типове всъщност са обекти. Ето и нашия първи пример – създаваме изброим тип „оценка“ с шест възможни стойности: Прочети още…
* Множества: хеш таблици и червено-черни дървета
Публикувано на 15 ноември 2015 в раздел ПИК3 Java.
Множествата са по принцип по-прости структури спрямо речниците. Те се базират на един основен интерфейс Set. Докато при речниците имахме комбинации от Key и Value, при множествата има само един единствен елемент, който е едновремено Key и Value. Или казано по друг начин множествата са речници при които всяко Value се използва за Key само за себе си. Веднага можете да се досетите, че е много лесно един Set да бъде реализиран чрез Map – например ако подавате един и същи обект за Key и Value в който и да е Map, той ще работи като Set.
С казаното дотук не е изненада, че в Java популярните имплементиращи интерфейс Set класове HashSet, LinkedHashSet и TreeSet всъщност използват именно HashMap, LinkedHashMap и TreeMap вътре в себе си. Например извиквайки метод add на един HashSet, той извиква метод put на вградения в него HashMap, като му подава параметри put(yourObject, dummyObject), където yourObject е вашия обект (използва се за key), а DummyObject e вградена в HashSet референция към следното: Прочети още…
* Речници: хеш таблици и червено-черни дървета
Публикувано на 15 ноември 2015 в раздел ПИК3 Java.
Map е един от често използваните интерфейси в Java. Чрез него се реализират т.нар. „речници“. В речниците имаме записани двойки от стойности (ключ, стойност). Целта е да успяваме много бързо да намираме стойността, търсейки по чрез нейния ключ. Много често по интервюта за работа се задават въпроси свързани с класове, които го имплементират. Прочети още…
* Изходен код от упражнение 8, 2015
Публикувано на 13 ноември 2015 в раздел ПИК3 Java.
Задачата е за подготовка за контролна работа. Даден е файл с математически задачи, който има следната структура (показано е примерно съдържание): Прочети още…
* Изподен код от упражнение 7, 2015
Публикувано на 06 ноември 2015 в раздел ПИК3 Java.
Задача 1. Реализирайте клас Author (автор). В него член-променливи са имена (name от тип String), държава (country от тип String) и телефонен номер (phone от тип String). Направете само конструктор с подадени параметри. Променливите name и country направете само за четене, а phone направете така, че да може да се чете и променя. За phone се погрижете да е записан в следния формат: xxx-xxx-xxxx (например 567-123-8888 e валиден телефон). Предвидете допълнителна възможност да бъде въведен телефон и в алтернативни два формата – xxxxxxxxxxx (например 5671238888) или (xxx) xxx-xxxx (например (567) 123-8888). Ако в set метода се подаде телефон в алтернативен формат, вие трябва да го конвертирате до стандартния и да го запишете в него. Прочети още…
* Изходен код от упражнение 6, 2015
Публикувано на 30 октомври 2015 в раздел ПИК3 Java.
Трябва да се напише програма, която решава различни типове математически уравнения. Реализирайте следната йерархия:
Задача 1. Дефинирайте интерфейс Solvable с действия: Прочети още…
* Изходен код от упражнение 4, 2015
Публикувано на 29 октомври 2015 в раздел ПИК3 Java.
Задача 1. Дефинирайте интерфейс “Buyable”, в който дефинирайте действиe “int buy(int quantity)” (купуване на продукт) и действие “String getName()” (взимане на името на продукта).
Задача 2. Дефинирайте клас “Product”, който имплементира интерфейс “Buyable”. Член променливи са:
- id – идентификатор на продукта в склада от тип int;
- name – описание на продукта, записано в String;
- quantity – наличност (бройки) в склада от тип int.
Защитете член променливите по следния начин:
- id трябва да е винаги положително число (строго по-голямо от 0);
- quantity трябва да е винаги по-голямо или равно на 0;
- name да бъде само за четене.
Реализирайте метод buy. Идеята му е по подадено количество стока от даден продукт да връща или “id” на продукта в склада (ще бъде положително число), или -1 (невалидно id) ако такова количество не е налично или ако е подадена невалидна стойност за количество (<=0). Ако покупката е успешна, да намалява стойността на член-променлива quantity с количеството, което е закупено.
Задача 3. Реализирайте клас “BetterProduct”, който наследява клас “Product” и предефинира метод buy по следния начин – вече вместо да връща -1 при неуспех, трябва да хвърля RuntimeException с подходящо съобщение за грешка.
Задача 4. Направете клас с main метод, в който инициализирайте масив с два елемента от тип Buyable. В него запишете един Product и един BetterProduct. Обходете масива с цикъл и отпечатайте имената на продуктите на екрана. Прочети още…