Категория ‘ПИК3 Java’

* Форматиране на низове – примерна задача

Публикувано на 26 януари 2017 в раздел ПИК3 Java.

В долната задача демонстрирам употребата на String.format(). Дадена е следната задача: по подадено число N, да се отпечата чрез стандартния изход матрица с размерност NxN със звезди по диагоналите и празни интервали за останалите елементи.

Обикновено хората започват да търсят решение чрез вложени цикли, например: Прочети още…

.

 


* Упражнение 15, 2015

Публикувано на 08 януари 2016 в раздел ПИК3 Java.

Това е решението на примерната задача за изпит, която е дадена на javac.bg. Имаме библиотека за документ (docslib), сървърно приложение (Upr15Server) и две клиентски приложения: Upr15Student, което изпраща документи и Upr15Secretary, което обработва документи. Прочети още…

.

 


* Задача за подготовка за изпит: конзолна игра на Пексесо

Публикувано на 07 януари 2016 в раздел ПИК3 Java.

Трябва да се създаде сървър за игра на “Пексесо” (blocks). Играта ще се играе от трима души с четен брой от двойки картинки (карти). Картинките се разполагат на масата закрити с лицето надолу, а играчите един след друг се редуват да ги обръщат две по две. Ако даден играч с един ход обърне две еднакви картинки, той ги прибира и печели точка. В противен случай (ако картинките са различни), той ги връща обратно с лицето надолу където са били. Печели играчът, който събере най-много точки в края на играта. Във варианта, който се изисква вие да реализирате, няма да се показват картинки, а ще се използва матрица с числа. Например: Прочети още…

.

 


* Упражнение 13, 2015

Публикувано на 18 декември 2015 в раздел ПИК3 Java.

Задачата беше да се направи клиент-сървър приложение за обмен на файлове. Когато клиент се свърже, той първо си подава потребителското име. След това подава една от следните две команди:

  • send <име на файл>
  • get <име на файл>

При команда send клиента изпраща файла на сървъра и затваря връзката. Сървърът трябва да запише файла с име <username>-<име на файл>. При команда get сървъра намира файл с име <username>-<име на файл>, изпраща го на клиента и затваря връзката.

Примерно решение изтеглете >>> от тук <<<

.

 


* Работа с дата и час

Публикувано на 09 декември 2015 в раздел ПИК3 Java.

В общи линии още от своето създаване Java винаги е търпяла критики към своята библиотека за работа с дата и час. Стандартните класове java.util.Date и java.util.Calendar имат редица проблеми:

  • Сбъркан дизайн: например Date не е дата, а е всъщност timestamp, месеците започват от 0. Дори да свикнете с това, дните пък си започват от 1. И т.н.;
  • Много трудна работа с часови зони;
  • Не можете да имате стандартни неща като дати без години, часове без отчитане на секунди и т.н.;
  • Няма вградена синхронизация за работа в многонишкова среда.

През годините паралелно с JDK се е развивала една библиотека наречена Joda, която решава тези проблеми. В крайна сметка с Java 8 се въвежда пакета java.time, който е с работно име JSR 310 и е базиран на библиотеката Joda, но има известни разлики с нея. В тази статия ще разгледаме именно JSR 310, защото от тук нататък това ще е стандартната библиотека за работа с дата и час в Java.

Четирите най-основни класа за работа с java.time са: Прочети още…

.

 


* Упражнение 11, 2015

Публикувано на 05 декември 2015 в раздел ПИК3 Java.

В това упражнение доработваме програмата от миналото упражнение като я правим клиент-сървър приложение. Ще направим клиент, който ще се свързва със сървъра и ще му изпраща пациент (Patient). Сървърът ще излекува пациента по съответния ред и ще върне обратно на клиента Report. Сървърът ще е направен така, че да може да обслужва много клиенти, но не едновременно, а един по един.

По сървъра редакциите са основно върху main метода на класа на създаденото преди това приложение. Това, което трябва да направите, е: Прочети още…

.

 


* Сериализация на обекти

Публикувано на 05 декември 2015 в раздел ПИК3 Java.

Java ни предлага механизъм, наречен сериализация на обекти. При него даден обект се представя като бинарна поредица съдържаща описание на класа на обекта и неговите конкретни данни (член-променливи). Така получената бинарна поредица може да бъде изпращана чрез ObjectOutputStream – например да бъде записана във файл, да бъде изпратена по мрежата до друг компютър и т.н. Четенето на обекта се осъществява чрез прозцес наречен „десериализация“ – при него обекта се възстановява в паметта в оригиналния си вид. Извършва се чрез ObjectInputStream. Най-важното за процеса на сериализация-десериализация е, че те са платформено независими, т.е. няма проблем да сериализиран на един компютър и да бъде десериализиран на друг, който е със съвсем различни характеристики (дори и различна 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. Прочети още…

.