Weebly



Задачи TOC \o "1-3" \h \z \u Автомобили (30 поени) Problem 1 (5 / 8) PAGEREF _Toc389568567 \h 1Мобилни телефони (30 поени) Problem 1 (1 / 3) PAGEREF _Toc389568568 \h 5Матрица Problem 1 (2 / 2) PAGEREF _Toc389568569 \h 7Администраци?а на чет-систем Problem 2 (0 / 1) PAGEREF _Toc389568570 \h 9Дропки (35 поени) Problem 3 (1 / 2) PAGEREF _Toc389568571 \h 14Мерна станица (35 поени) Problem 2 (1 / 1) PAGEREF _Toc389568572 \h 16Архива (35 поени) Problem 2 (1 / 1) PAGEREF _Toc389568573 \h 20Календар на настани (35 поени) Problem 3 (1 / 1) PAGEREF _Toc389568574 \h 24Насловна страница Problem 3 (1 / 6) PAGEREF _Toc389568575 \h 27Тежини (30 поени) Problem 1 (1 / 6) PAGEREF _Toc389568576 \h 32Циркуларна листа (35 поени) Problem 2 (0 / 0) PAGEREF _Toc389568577 \h 36Патна мрежа (35 поени) Problem 3 (0 / 5) PAGEREF _Toc389568578 \h 39Место за паркинг (40 поени) Problem 8 (5 / 6) PAGEREF _Toc389568579 \h 42Автомобили (30 поени) Problem 1 (5 / 8) Да се напише класа за автомобил Car во ко?а се чува:производителмоделценамо?ност. Да се имплементира конструктор со следните аргументи Car(String manufacturer, String model, int price, float power).Потоа да се напише класа CarCollection во ко?а се чува колекци?а од автомобили. Во оваа класа треба да се имплментираат следните методи:public void addCar(Car car) - додава?е автомобил во колекци?ата public void sortByPrice(boolean ascending) - подредува?е на колекци?ата по цената на автомобилот (во растечки редослед ако аргументот ascending е true, во спротивно, во опа?ачки редослед). Ако цената на автомобилите е иста, сортира?ето да се направи според нивната мо?носта. public List<Car> filterByManufacturer(String manufacturer) - вра?а листа со автомобили од одреден производител (споредбата е според името на производителот без да се води сметка за големи и мали букви во името). Автомобилите во оваа листата треба да бидат подредени според моделот во растечки редослед.public List<Car> getList() - ?а вра?а листата со автомобили од колекци?ата.Solution:import java.util.*;public class CarTest {public static void main(String[] args) {CarCollection carCollection = new CarCollection();String manufacturer = fillCollection(carCollection);carCollection.sortByPrice(true);System.out.println("=== Sorted By Price ASC ===");print(carCollection.getList());carCollection.sortByPrice(false);System.out.println("=== Sorted By Price DESC ===");print(carCollection.getList());System.out.printf("=== Filtered By Manufacturer: %s ===\n", manufacturer);List<Car> result = carCollection.filterByManufacturer(manufacturer);print(result);}static void print(List<Car> cars) {for (Car c : cars) {System.out.println(c);}}static String fillCollection(CarCollection cc) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {String line = scanner.nextLine();String[] parts = line.split(" "); if(parts.length < 4) {scanner.close(); return parts[0]; }Car car = new Car(parts[0], parts[1], Integer.parseInt(parts[2]), Float.parseFloat(parts[3]));cc.addCar(car);} scanner.close();return "";}}class Car {String manufacturer;String model;int price;float power;public Car(String manufacturer, String model, int price, float power) {this.manufacturer = manufacturer;this.model = model;this.price = price;this.power = power;}public String getManufacturer(){return manufacturer;}public int getPrice(){return price;}public float getPower(){return power;}public String getModel(){return model;}public String toString(){return manufacturer + " " + model + " (" + (int)power + "KW) " + price;}}class CarCollection {List<Car> carList;public CarCollection(){carList = new ArrayList<>();}public void addCar(Car car){carList.add(car);}public void sortByPrice(boolean ascending){if(ascending)Collections.sort(carList, new SortByPriceLowToHigh());else Collections.sort(carList, new SortByPriceHighToLow());}public List<Car> filterByManufacturer(String manufacturer){List<Car> carFromManufacturer = new ArrayList<>();for(Car c : carList){String m1 = c.getManufacturer().toLowerCase();String m2 = manufacturer.toLowerCase();if(m1.equals(m2)) carFromManufacturer.add(c);}Collections.sort(carFromManufacturer, new SortByModel());return carFromManufacturer;}public List<Car> getList(){return carList;}}class SortByPriceLowToHigh implements Comparator<Car> {@Overridepublic int compare(Car car1, Car car2) {if(car1.getPrice() > car2.getPrice()) return 1; else if(car1.getPrice() < car2.getPrice()) return -1; else if(car1.getPower() > car2.getPower()) return 1; else return -1;} }class SortByPriceHighToLow implements Comparator<Car> {@Overridepublic int compare(Car car1, Car car2) {if(car1.getPrice() < car2.getPrice()) return 1; else if(car1.getPrice() > car2.getPrice()) return -1; else if(car1.getPower() < car2.getPower()) return 1; else return -1;} }class SortByModel implements Comparator<Car>{@Overridepublic int compare(Car car1, Car car2) {return car1.getModel().compareTo(car2.getModel());} Мобилни телефони (30 поени) Problem 1 (1 / 3) Да се напише класа за мобилен телефон Phone во ко?а се чува:имепроизводителцена на телефон. Потоа да се напише класа PhonesList во ко?а се чува колекци?а од телефони. Во оваа класа треба да се имплментираат следните методи:public void addPhone(Phone phone) - дадава?е телефон во колекци?ата public void sortByPrice() - сортира?е на колекци?ата по цената на телефонот (во растечки редослед)public void sortByManufacturer() - сортира?е на колекци?ата по производителот на телефонот (лексикографски во растечки редослед)public List<Phone> getPhones() - ?а вра?а колекци?ата од телефони.Solution:import java.util.*;public class MobilePhonesTest { static void fillList(PhonesList mpl) {Scanner scanner = new Scanner(System.in);while(scanner.hasNext()) {String line = scanner.nextLine();String[] parts = line.split(" ");Phone phone = new Phone(parts[0], parts[1], Float.parseFloat(parts[2]));mpl.addPhone(phone);}scanner.close();} public static void main(String[] args) {PhonesList mpl = new PhonesList();// Create list objectfillList(mpl);mpl.sortByManufacturer();System.out.println("SORTED BY MANUFACTURER");for(Phone p : mpl.getPhones()) {System.out.println(p);}mpl.sortByPrice();System.out.println("SORTED BY PRICE");for(Phone p : mpl.getPhones()) {System.out.println(p);}}}class PhonesList {// vashiot kod ovdeArrayList<Phone> phonesList;public PhonesList(){phonesList = new ArrayList<>();}public void addPhone(Phone phone){phonesList.add(phone);}public void sortByPrice(){Collections.sort(phonesList, new SortByPrice());}public void sortByManufacturer(){Collections.sort(phonesList, new SortByManufacturer());}public List<Phone> getPhones(){return phonesList;}}class Phone { // vashiot kod ovdeString name;String manufacturer;double price;public Phone(String name, String manufacturer, double price) {this.name = name;this.manufacturer = manufacturer;this.price = price;}public String getName() {return name;}public String getManufacturer() {return manufacturer;}public double getPrice() {return price;}@Overridepublic String toString() {return String.format("%s %s %f.2", name, manufacturer, price);}}class SortByPrice implements Comparator<Phone>{@Overridepublic int compare(Phone phone1, Phone phone2) {if(phone1.getPrice() > phone2.getPrice()) return 1;else if(phone1.getPrice() < phone2.getPrice()) return -1;else return phone1.getManufacturer().compareTo(phone2.getManufacturer());}}class SortByManufacturer implements Comparator<Phone>{@Overridepublic int compare(Phone phone1, Phone phone2) {return phone1.getManufacturer().compareTo(phone2.getManufacturer());}}Матрица Problem 1 (2 / 2) Да се имплементира класа Matrix (матрица) за чува?е на дво-димензионална низа од double вредности. Во класата се чуваат димензиите на матрицата (бро?от на редици и бро?от на колони) и елементите.Да се имплментираат методи за вчитува?е void load(InputStream is) на матрицата од влезен тек и за запишува?е void write(OutputStream os) матрица на излезен тек. Методот за вчитува?е фрла исклучок од тип MatrixInvalidDimensions ако барем една од димензиите (бро?от на редици или колони) е негативен бро?.На излезниот тек се печатат само вредностите на матрицата форматирани со 10 места од кои 2 места се за децималниот дел од бро?от. Пораката ко?а се чита од исклучокот е "INVALID DIMENSIONS".Solution:import java.util.*;public class MatrixTest {public static void main(String[] args) {try {Matrix mat = new Matrix(); mat.load(System.in);mat.write(System.out);} catch (MatrixInvalidDimensions e) {System.out.println(e.getMessage());}}}class Matrix { private int rows; private int columns; private double data[][]; public Matrix() { rows = columns = 0; data = null; } public void load(InputStream inputStream) throws MatrixInvalidDimensions { Scanner scanner = new Scanner(inputStream); int r = scanner.nextInt(); int c = scanner.nextInt(); if(r < 0 || c < 0) throw new MatrixInvalidDimensions(); rows = r; columns = c; data = new double[rows][columns]; for(int i = 0; i < rows; ++i) { for(int j = 0; j < columns; ++j) { data[i][j] = scanner.nextDouble(); } } scanner.close(); } public void write(OutputStream outputStream) { PrintWriter printWriter = new PrintWriter(outputStream); for(int i = 0; i < rows; ++i) { for(int j = 0; j < columns; ++j) { printWriter.printf("%10.2f", data[i][j]); } printWriter.println(); } printWriter.close(); }}class MatrixInvalidDimensions extends Exception { public MatrixInvalidDimensions() { super("INVALID DIMENSIONS"); }}Администраци?а на чет-систем Problem 2 (0 / 1) Треба?да?се?развие?класа?за?администраци?а?на?чет‐систем(chat).?Системот?се?состои?од?пове?е?чет‐соби,?об?екти?од?класата ChatRoom. Во?ChatRoom ги?чуваме името?на собата?и?ими?ата?на?корисниците?кои?тековно?се?нао?аат?во?таа?соба?(за?корисниците?да?се?користи?соодветен?Set).ChatRoom(String?name)?‐?креира?нова?празна?соба?за?чет?(празна?значи?без?корисници).?addUser(String?username)?-?го?додава?корисникот?со?тоа?име?во?собата.?removeUser(String?username)?-?го?отстранува?корисникот?со?тоа?име?од?собата?доколку?има?таков,?во?спротивно?не?прави?ништо.?toString():String?- вра?а?стринг?кои?ги?содржи?името?на?собата?и?сите?корисници?кои?се?во собата?секо??одделен?со?нов?ред. Корисниците?се?подредени?алфабетски. Ако собата е празна се вра?а името на собата во еден ред,?а?во?вториот?ред?стрингот?"EMPTY"?(наводници?само?за?по?аснува?е).?hasUser(String?username):boolean?- вра?а?true?ако?постои?корисник?со?тоа?име?во?собата.?numUsers():int?- го?вра?а?бро?от?на?корисници?во?собата.?Главната? класа?ChatSystem? ги? содржи? сите? соби? и? сите? орисници.?Корисниците?може да?се?членови?на?една, пове?е?или?да?не?се?членови?на ниедна?соба. За мена?мент на?собите?треба?да?ги?понудите?следните?три?методи:addRoom(String?roomName) - додава?нова?празна?соба?во?листата?на?соби.?removeRoom(String?roomName)?-??а?отстранува?собата?од?листата.?getRoom(String?roomName):ChatRoom?- го?вра?а?об?ектот?ко???а?претставува?собата?со?име?roomName.?Фрлете?NoSuchRoomExcpetion(roomName)?доколку?не?постои?соба?со?тоа?име.Забелешка:?Собите?чува?те?ги?во?TreeMap?за?да?бидат?секогаш?подредени?по?нивното?име.Дополнително?во?класата?ChatSystem?посто?ат?следните?методи?за?работа?со?корисниците:ChatSystem()?- default?constructor?register(String?userName)?-?го?регистрира?корисникот?во?системот.?Го?додава?во?собата?со на?малку?корисници. Доколку?има?пове?е такви?соби?тогаш го?додава во првата соба?по лексикоргафско?подредува?е.registerAndJoin(String?userName,?String roomName) - го?регистрира?корисникот?во?системот. Дополнително?го?додава?во?собата?со?име?roomName.?joinRoom(String?userName,?String roomName)?- го? додава? корисникот? во? собата? со?соодветно? име? доколку? таа? постои,? во? спротивно? фрла? исклучок? од? типот NoSuchRoomExcеpetion(roomName).?Ако?не?постои?регистриран?корисник?со?тоа?име?се?фрла?исклучок?NoSuchUserException(userName).leaveRoom(String?username,?String?roomName)?-?го?отстранува?корисникот?од?собата?со?соодветно? име? доколку? таа? постои.? во? спротивно? фрла? исклучок? од? типот NoSuchRoomExcеpetion(roomName).?Ако?не?постои?регистриран?корисник?со?тоа?име?се?фрла?исклучок?NoSuchUserException(userName). followFriend(String?username,?String?friend_username)?–?корисникот?со?име?username?го приклучува?во?сите?соби?во?ко? е?член?корисникот со?име friendUsername. Ако?не постои регистриран?корисник?со?тоа?име?се?фрла?исклучок?NoSuchUserException(userName).Solution:import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.*;class NoSuchRoomException extends Exception {public NoSuchRoomException(String message) {super(message);}}class NoSuchUserException extends Exception {public NoSuchUserException(String message) {super(message);}}class ChatRoom implements Comparable<ChatRoom> {private String name;private TreeSet<String> users;public ChatRoom(String name) {this.name = name;users = new TreeSet<String>();}public void addUser(String userName) {users.add(userName);}public void removeUser(String userName) {users.remove(userName);}public boolean hasUser(String userName) {return users.contains(userName);}public int numUsers() {return users.size();}@Overridepublic String toString() {String string = name + "\n";if (users.size() == 0)return string + "EMPTY\n";for (String userName : users)string += userName + "\n";return string;}@Overridepublic int compareTo(ChatRoom chatRoom) {if (this.numUsers() < chatRoom.numUsers())return -1;else if (this.numUsers() > chatRoom.numUsers())return 1;elsereturn this.pareTo(chatRoom.name);}}class ChatSystem {private TreeMap<String, ChatRoom> rooms;private LinkedList<String> users;public ChatSystem() {rooms = new TreeMap<String, ChatRoom>();users = new LinkedList<String>();}public void addRoom(String roomName) {ChatRoom chatRoom = new ChatRoom(roomName);rooms.put(roomName, chatRoom);}public void removeRoom(String roomName) {rooms.remove(roomName);}public ChatRoom getRoom(String roomName) throws NoSuchRoomException {ChatRoom chatRoom = rooms.get(roomName);if (chatRoom == null)throw new NoSuchRoomException(roomName);elsereturn chatRoom;}public void register(String userName) {if (rooms.size() > 0) {users.add(userName);ChatRoom chatRooms[] = new ChatRoom[rooms.size()];rooms.values().toArray(chatRooms);Arrays.sort(chatRooms);chatRooms[0].addUser(userName);}}public void registerAndJoin(String userName, String roomName) throws NoSuchRoomException {users.add(userName);ChatRoom chatRoom = this.getRoom(roomName);chatRoom.addUser(userName);}public void joinRoom(String userName, String roomName) throws NoSuchRoomException, NoSuchUserException {ChatRoom chatRoom = this.getRoom(roomName);chatRoom.addUser(userName);}public void leaveRoom(String userName, String roomName) throws NoSuchRoomException, NoSuchUserException {ChatRoom chatRoom = this.getRoom(roomName);int index = users.indexOf(userName);if (index != -1)chatRoom.removeUser(userName);// else// throw new NoSuchUserException(userName);// Nema nitu try-catch nitu throws deklaracija za NoSuchUserException vo// main}public void followFriend(String userName, String friendUserName) throws NoSuchUserException {/* * * Nema nitu try-catch nitu throws deklaracija za NoSuchUserException vo * main * * int index = users.indexOf(userName); * * if(index == -1) throw new NoSuchUserException(userName); * * index = users.indexOf(friendUserName); * * if(index == -1) throw new NoSuchUserException(friendUserName); */LinkedList<ChatRoom> chatRooms = new LinkedList<ChatRoom>(rooms.values());for (ChatRoom chatRoom : chatRooms)if (chatRoom.hasUser(friendUserName))chatRoom.addUser(userName);}}public class ChatSystemTest {public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, NoSuchRoomException {Scanner jin = new Scanner(System.in);int k = jin.nextInt();if (k == 0) {ChatRoom cr = new ChatRoom(jin.next());int n = jin.nextInt();for (int i = 0; i < n; ++i) {k = jin.nextInt();if (k == 0)cr.addUser(jin.next());if (k == 1)cr.removeUser(jin.next());if (k == 2)System.out.println(cr.hasUser(jin.next()));}System.out.println("");System.out.println(cr.toString());n = jin.nextInt();if (n == 0)return;ChatRoom cr2 = new ChatRoom(jin.next());for (int i = 0; i < n; ++i) {k = jin.nextInt();if (k == 0)cr2.addUser(jin.next());if (k == 1)cr2.removeUser(jin.next());if (k == 2)cr2.hasUser(jin.next());}System.out.println(cr2.toString());}if (k == 1) {ChatSystem cs = new ChatSystem();Method mts[] = cs.getClass().getMethods();while (true) {String cmd = jin.next();if (cmd.equals("stop"))break;if (cmd.equals("print")) {System.out.println(cs.getRoom(jin.next())+"\n");continue;}for (Method m : mts) {if (m.getName().equals(cmd)) {String params[] = new String[m.getParameterTypes().length];for (int i = 0; i < params.length; ++i)params[i] = jin.next();//m.invoke(cs, params);}}}}}}Дропки (35 поени) Problem 3 (1 / 2) Треба да се развие генеричка класа за работа со дропки. Класата GenericFraction има два генерички параметри T и U кои мора да бидат од неко?а класа ко?а наследува од класата Number. GenericFraction има две променливи:numerator - броителdenominator - именител.Треба да се имплементираат следните методи:GenericFraction(T numerator, U denominator) - конструктор ко? ги иници?ализира броителот и именителот на дропката. Ако се обидиме да иници?ализираме дропка со 0 вредност за именителот треба да се фрли исклучок од тип ZeroDenominatorException GenericFraction<Double, Double> add(GenericFraction<? extends Number, ? extends Number> gf) - собира?е на две дропкиdouble toDouble() - вра?а вредност на дропката како реален бро?toString():String - ?а печати дропката во следниот формат [numerator] / [denominator], скратена (нормализирана) и секо? со две децимални места.Solution:import java.util.Scanner;public class GenericFractionTest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double n1 = scanner.nextDouble(); double d1 = scanner.nextDouble(); float n2 = scanner.nextFloat(); float d2 = scanner.nextFloat(); int n3 = scanner.nextInt(); int d3 = scanner.nextInt(); try { GenericFraction<Double, Double> gfDouble = new GenericFraction<Double, Double>(n1, d1); GenericFraction<Float, Float> gfFloat = new GenericFraction<Float, Float>(n2, d2); GenericFraction<Integer, Integer> gfInt = new GenericFraction<Integer, Integer>(n3, d3); System.out.printf("%.2f\n", gfDouble.toDouble()); System.out.println(gfDouble.add(gfFloat)); System.out.println(gfInt.add(gfFloat)); System.out.println(gfDouble.add(gfInt)); gfInt = new GenericFraction<Integer, Integer>(n3, 0); } catch(ZeroDenominatorException e) { System.out.println(e.getMessage()); } scanner.close(); }}class GenericFraction<T extends Number, U extends Number> {T numerator;U denominator;public GenericFraction(T numerator, U denominator) throws ZeroDenominatorException {this.numerator = numerator;if(denominator.doubleValue() == 0) throw new ZeroDenominatorException();else this.denominator = denominator;}public GenericFraction<Double, Double> add(GenericFraction<? extends Number, ? extends Number> gf) throws ZeroDenominatorException{double d;double n;if(this.denominator != gf.denominator) {d = this.denominator.doubleValue() * gf.denominator.doubleValue();n = this.numerator.doubleValue() * gf.denominator.doubleValue() + gf.numerator.doubleValue() * this.denominator.doubleValue();} else {n = this.numerator.doubleValue() + gf.numerator.doubleValue();d = this.denominator.doubleValue();}for(int i = (int)n ; i > 0; i--){if(n % i == 0 && d % i == 0){n = n / i;d = d / i;}}GenericFraction<Double, Double> genericFraction = new GenericFraction<Double, Double>(n, d);return genericFraction;}@Overridepublic String toString() {return String.format("%.2f / %.2f", numerator, denominator);}public double toDouble(){return numerator.doubleValue() / denominator.doubleValue();}}class ZeroDenominatorException extends Exception {public ZeroDenominatorException(){super("Denominator cannot be zero");}Мерна станица (35 поени) Problem 2 (1 / 1) Во една метеролошка станица на секои 5 минути пристигнуваат податоци за временските услови (температура, влажност на воздухот, ветар, видливост, време). Пример за вакви податоци:температура: 13 степенивлажност: 98%ветар: 11.2 km/hвидливост: 14 kmвреме: 28.12.2013 14:37:55 (dd.MM.yyyy HH:mm:ss).Потребно е да се имплементира класа WeatherStation ко?а ?е ги чува податоците за временските услови за последните x денови (при додава?е на податоци за ново мере?е, сите мере?а чие што време е постаро за x денови од новото се бришат ). Исто така ако времето на новото мере?е кое се додава се разликува за помалку од 2.5 минути од времето на некое претходно додадено мере?е, тоа треба да се игнорира (не се додава).Да се имплементираат следните методи на класата WeatherStation:WeatherStation(int days) - конструктор со аргумент бро?от на денови за кои се чуваат мере?аpublic void addMeasurment(float temperature, float wind, float humidity, float visibility, Date date) - додава?е на податоци за ново мере?еpublic int total() - го вра?а вкупниот бро? на мере?а кои се чуваатpublic void status(Date from, Date to) - ги печати сите мере?а во периодот од from до to подредени според датумот во растечки редослед и на кра? ?а печати просечната температура во ово? период. Ако не посто?ат мере?а во ово? период се фрла исклучок од тип RuntimeException (вграден во ?ава). Пример за форматот на излезот:24.6 80.2 km/h 28.7% 51.7 km Tue Dec 17 23:40:15 CET 201323.5 32.2 km/h 16.5% 187.2 km Tue Dec 17 23:45:15 CET 201313.2 67.1 km/h 18.9% 135.4 km Tue Dec 17 23:50:15 CET 2013Avarage temperature: 20.43Solution:import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Scanner;import java.util.TreeMap;import java.util.Set;import java.util.Map;import java.util.Iterator;public class WeatherStationTest {public static void main(String[] args) throws ParseException {Scanner scanner = new Scanner(System.in);DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");int n = scanner.nextInt();scanner.nextLine();WeatherStation ws = new WeatherStation(n);while (true) {String line = scanner.nextLine();if (line.equals("=====")) {break;}String[] parts = line.split(" ");float temp = Float.parseFloat(parts[0]);float wind = Float.parseFloat(parts[1]);float hum = Float.parseFloat(parts[2]);float vis = Float.parseFloat(parts[3]);line = scanner.nextLine();Date date = df.parse(line);ws.addMeasurment(temp, wind, hum, vis, date);}String line = scanner.nextLine();Date from = df.parse(line);line = scanner.nextLine();Date to = df.parse(line);scanner.close();System.out.println(ws.total());try {ws.status(from, to);} catch (RuntimeException e) {System.out.println(e);}}}// vashiot kod ovdeclass WeatherStatus implements Comparable<WeatherStatus> {private float temperature;private float humidity;private float windSpeed;private float visibility;private Date date;public WeatherStatus(float temperature, float humidity, float windSpeed,float visibility, Date date) {this.temperature = temperature;this.humidity = humidity;this.windSpeed = windSpeed;this.visibility = visibility;this.date = date;}public float getTemperature() {return temperature;}public float getHumidity() {return humidity;}public float getWindSpeed() {return windSpeed;}public float getVisibility() {return visibility;}public Date getDate() {return date;}@Overridepublic int compareTo(WeatherStatus weatherStatus) {return pareTo(weatherStatus.date);}@Overridepublic String toString() {return String.format("%.1f %.1f km/h %.1f%s %.1f km %s", temperature,humidity, windSpeed, "%", visibility, date.toString());}}class WeatherStation {private TreeMap<Date, WeatherStatus> treeMap;private int days;public WeatherStation(int days) {treeMap = new TreeMap<Date, WeatherStatus>();this.days = days;}public void addMeasurment(float temperature, float wind, float humidity, float visibility, Date date) {WeatherStatus newWeatherStatus = new WeatherStatus(temperature, wind, humidity, visibility, date);Map.Entry<Date, WeatherStatus> lastEntry = treeMap.lastEntry();if (lastEntry != null) {WeatherStatus lastWeatherStatus = treeMap.lastEntry().getValue();if (((newWeatherStatus.getDate().getTime() - lastWeatherStatus.getDate().getTime()) / 1000) >= 150) {treeMap.put(date, newWeatherStatus);Set<Map.Entry<Date, WeatherStatus>> entrySet = treeMap.entrySet();Iterator<Map.Entry<Date, WeatherStatus>> iterator = entrySet.iterator();while (iterator.hasNext()) {Map.Entry<Date, WeatherStatus> entry = iterator.next();int daysBetween = (int) ((date.getTime() - entry.getKey().getTime()) / (1000 * 60 * 60 * 24));if (daysBetween >= days)iterator.remove();}}} elsetreeMap.put(date, newWeatherStatus);}public int total() {return treeMap.size();}public void status(Date from, Date to) {float temperatureSum = 0;int sum = 0;for (Map.Entry<Date, WeatherStatus> entry : treeMap.entrySet()) {if (entry.getKey().compareTo(from) >= 0 && entry.getKey().compareTo(to) <= 0) {System.out.println(entry.getValue());temperatureSum += entry.getValue().getTemperature();sum++;}}if (sum == 0)throw new RuntimeException();System.out.println(String.format("Average temperature: %.2f",temperatureSum / sum));}}Архива (35 поени) Problem 2 (1 / 1) Да се имплементира класа ArchiveStore во ко?а се чува листа на архиви (елементи за архивира?е). Секо? елемент за архивира?е Archive има:id - цел бро?dateArchived - датум на архивира?е.Посто?ат два видови на елементи за архивира?е, LockedArchive за ко? дополнително се чува датум до ко? не смее да се отвори dateToOpen и SpecialArchive за ко? се чуваат максимален бро? на дозволени отвара?а maxOpen. За елементите за архивира?е треба да се обезбедат следните методи:LockedArchive(int id, Date dateToOpen) - конструктор за заклучена архиваSpecialArchive(int id, int maxOpen) - конструктор за специ?ална архиваЗа класата ArchiveStore да се обезбедат следните методи:ArchiveStore() - default конструкторvoid archiveItem(Archive item, Date date) - метод за архивира?е елемент item на одреден датум datevoid openItem(int id, Date date) - метод за отвара?е елемент од архивата со зададен id и одреден датум date. Ако не постои елемент со даденото id треба да се фрли исклучок од тип NonExistingItemException со порака Item with id [id] doesn't exist.String getLog() - вра?а стринг со сите пораки запишани при архивира?ето и отвара?ето архиви во посебен ред.За секо?а акци?а на архивира?е во текст треба да се додаде следната порака Item [id] archived at [date], додека за секо?а акци?а на отвара?е архива треба да се додаде Item [id] opened at [date]. При отвара?е ако се работи за LockedArhive и датумот на отвара?е е пред датумот кога може да се отвори, да се додаде порака Item [id] cannot be opened before [date]. Ако се работи за SpecialArhive и се обидиеме да ?а отвориме пове?е пати од дозволениот бро? (maxOpen) да се додаде порака Item [id] cannot be opened more than [maxOpen] times.Solution:import java.util.Date;import java.util.Scanner;import java.util.ArrayList;public class ArchiveStoreTest {public static void main(String[] args) {ArchiveStore store = new ArchiveStore();Date date = new Date(113, 10, 7);Scanner scanner = new Scanner(System.in);scanner.nextLine();int n = scanner.nextInt();scanner.nextLine();scanner.nextLine();int i;for (i = 0; i < n; ++i) {int id = scanner.nextInt();long days = scanner.nextLong();Date dateToOpen = new Date(date.getTime()+ (days * 24 * 60 * 60 * 1000));LockedArchive lockedArchive = new LockedArchive(id, dateToOpen);store.archiveItem(lockedArchive, date);}scanner.nextLine();scanner.nextLine();n = scanner.nextInt();scanner.nextLine();scanner.nextLine();for (i = 0; i < n; ++i) {int id = scanner.nextInt();int maxOpen = scanner.nextInt();SpecialArchive specialArchive = new SpecialArchive(id, maxOpen);store.archiveItem(specialArchive, date);}scanner.nextLine();scanner.nextLine();while (scanner.hasNext()) {int open = scanner.nextInt();try {store.openItem(open, date);} catch (NonExistingItemException e) {System.out.println(e.getMessage());}}System.out.println(store.getLog());}}abstract class Archive {private int id;private Date dateArchived;public Archive(int id) {this.id = id;this.dateArchived = null;}public int getId() {return id;}public void setDateArchived(Date dateArchived) {this.dateArchived = dateArchived;}public Date getDateArchived() {return dateArchived;}public abstract String open(Date date);}class LockedArchive extends Archive {private Date dateToOpen;public LockedArchive(int id, Date dateToOpen) {super(id);this.dateToOpen = dateToOpen;}public Date getDateToOpen() {return dateToOpen;}@Overridepublic String open(Date date) {if (date.before(dateToOpen) == true)return String.format("Item %d cannot be opened before %s\n", getId(), dateToOpen);elsereturn String.format("Item %d opened at %s\n", getId(), date);}}class SpecialArchive extends Archive {private int maxOpen;private int timesOpened;public SpecialArchive(int id, int maxOpen) {super(id);this.maxOpen = maxOpen;this.timesOpened = 0;}public int getMaxOpen() {return maxOpen;}@Overridepublic String open(Date date) {if (timesOpened >= maxOpen)return String.format("Item %d cannot be opened more than %d times\n", getId(), maxOpen);else {timesOpened++;return String.format("Item %d opened at %s\n", getId(), date);}}}class ArchiveStore {private ArrayList<Archive> archives;private String string;public ArchiveStore() {archives = new ArrayList<Archive>();string = "";}public void archiveItem(Archive item, Date date) {item.setDateArchived(date);archives.add(item);string += "Item " + item.getId() + " archived at " + date + "\n";}public void openItem(int id, Date date) throws NonExistingItemException {for (Archive archive : archives) {if (archive.getId() == id) {string += archive.open(date);return;}}throw new NonExistingItemException(id);}public String getLog() {return string;}}class NonExistingItemException extends Exception {public NonExistingItemException(int id) {super("Item with id " + id + " doesn't exist");}}Календар на настани (35 поени) Problem 3 (1 / 1) Да се имплементира класа за календар на настани EventCalendar. Секо? настан е дефиниран со:имелокаци?авреме (Date).Класата треба да ги овозможува следните функционалности:public EventCalendar(int year) - конструктор со еден аргумент годината на календаротpublic void addEvent(String name, String location, Date date) - додава нов настан зададен со име, локаци?а и време. Ако годината на настанот не се совпа?а со годината на календарот да се фрли исклучок од вид WrongDateException со порака Wrong date: [date].public void listEvents(Date date) - ги печати сите настани на одреден датум (ден) подредени според времето на одржува?е во растечки редослед (ако два настани имаат исто време на одржува?е, се подредуваат лексикографски според името). Добива?ето колекци?а од настани на одреден датум треба да биде во константно време O(1), а печате?ето во линеарно време O(n) (без сортира?е, само изминува?е)! Форматот на печате?е настан е dd MMM, YYY HH:mm at [location], [name].public void listByMonth() - ги печати сите месеци (1-12) со бро?от на настани во то? месец.Solution:import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.Map.Entry;import java.util.Scanner;import java.util.TreeMap;import java.util.TreeSet;class Event implements Comparable<Event>{String name;String place;Date date;public Event(String name, String place, Date date) {this.name = name;this.place = place;this.date = date;}@Overridepublic int compareTo(Event e) {return this.date.equals(e.date) ? pareTo(e.name) : pareTo(e.date); }@Overridepublic String toString() {Calendar cal = Calendar.getInstance();cal.setTime(date);DateFormat df = new SimpleDateFormat("dd MMM, yyyy HH:mm");String dateString = df.format(cal.getTime());return dateString + " at " + place + ", " + name;}}class EventCalendar {HashMap<String, TreeSet<Event>> events;TreeMap<Integer, Integer> byMonths;int year;public EventCalendar(int year) {events = new HashMap<>();this.year = year;byMonths = new TreeMap<>();for(int i = 1; i <= 12;) {byMonths.put(i++, 0);}}public void addEvent(String name, String location, Date date) throws WrongDateException {Calendar cal = Calendar.getInstance();cal.setTime(date);DateFormat df = new SimpleDateFormat("dd.MM.yyyy");String dateString = df.format(cal.getTime());if(cal.get(Calendar.YEAR) != year) {throw new WrongDateException(date);}if(!events.containsKey(dateString)) {events.put(dateString, new TreeSet<Event>());}events.get(dateString).add(new Event(name, location, date));int k = byMonths.get(cal.get(Calendar.MONTH) + 1);byMonths.remove(cal.get(Calendar.MONTH) + 1);byMonths.put((cal.get(Calendar.MONTH) + 1), k+1);}public void listEvents(Date date) {Calendar cal = Calendar.getInstance();cal.setTime(date);DateFormat df = new SimpleDateFormat("dd.MM.yyyy");String dateString = df.format(cal.getTime());TreeSet<Event> tmp = events.get(dateString);if(tmp == null) {System.out.println("No events on this day!");return;}for (Event event : tmp) {System.out.println(event);}}public void listByMonth() {for (Entry<Integer, Integer> ent : byMonths.entrySet()) {System.out.println(ent.getKey() + " : " + ent.getValue());}}}public class EventCalendarTest {@SuppressWarnings("resource")public static void main(String[] args) throws ParseException {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();scanner.nextLine();int year = scanner.nextInt();scanner.nextLine();EventCalendar eventCalendar = new EventCalendar(year);DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm");for (int i = 0; i < n; ++i) {String line = scanner.nextLine();String[] parts = line.split(";");String name = parts[0];String location = parts[1];Date date = df.parse(parts[2]);try {eventCalendar.addEvent(name, location, date);} catch (WrongDateException e) {System.out.println(e.getMessage());}}Date date = df.parse(scanner.nextLine());eventCalendar.listEvents(date);eventCalendar.listByMonth();}}@SuppressWarnings("serial")class WrongDateException extends Exception {public WrongDateException(Date date) {super("Wrong date: " + date);}}// vashiot kod ovdeНасловна страница Problem 3 (1 / 6) Весникот FINKI Onion се одлучил да развие мобилна апликаци?а за своите вести. Сите вести NewsItem се состо?ат од наслов, датум на об?авува?е (об?ект од класата java.util.Date) и категори?а. Категори?ата на вести е об?ект од класата Category во ко?а се чува само името на категори?ата. Две категории се еднакви, ако се еднакви нивните ими?а.Во весникот засега посто?ат два видови вести кои се об?авуваат и тоа:Текстуални вести (TextNewsItem) за ко? се чува дополнително текстот на веста,Мултимеди?ални вести (MediaNewsItem) за ко? се чува url кон локаци?ата на мултимеди?алната содржина (String) и бро?от на погледи.Сите вести се додаваат во класа FrontPage во ко?а се чува листа од вести и поле од сите категории на вести кои посто?ат. За оваа класа треба да се имплементираат следните методи:конструктор: FrontPage(Category[] categories);void addNewsItem(NewsItem newsItem) - додава нова вест во листата со вести,List<NewsItem> listByCategory(Category category) - прима еден аргумент рефернца кон об?ект од Category и вра?а листа со сите вести од таа категори?а.List<NewsItem> listByCategoryName(String category) - прима еден аргумент String името на категори?ата и вра?а листа со сите вести од категори?ата со тоа име. Ако не постои категори?а со вакво име во полето со категории, да се фрли исклучок од тип CategoryNotFoundException во ко? се пренесува името на категори?ата ко?а не е на?дена.препокрива?е на методот toString() ко? вра?а String составен од сите кратки содржини на вестите (повик на методот getTeaser()).Во класите за вести треба да се имплементира методот за вра?а?е на кратка содржина getTeaser() на следниот начин:TextNewsItem:getTeaser() - вра?а String составен од насловот на веста, пред колку минути е об?авена веста (цел бро? минути) и максимум 80 знаци од содржината на веста, сите одделени со нов ред.MediaNewsItem:getTeaser() - вра?а String составен од насловот на веста, пред колку минути е об?авена веста (цел бро? минути), url-то на веста и бро?от на погледи, сите одделени со нов ред.import java.util.Arrays;import java.util.Calendar;import java.util.Date;import java.util.Iterator;import java.util.LinkedList;import java.util.Scanner;import java.util.ArrayList;public class FrontPageTest { public static void main(String[] args) { // Reading Scanner scanner = new Scanner(System.in); String line = scanner.nextLine(); String[] parts = line.split(" "); Category[] categories = new Category[parts.length]; for (int i = 0; i < categories.length; ++i) { categories[i] = new Category(parts[i]); } int n = scanner.nextInt(); scanner.nextLine(); FrontPage frontPage = new FrontPage(categories); Calendar cal = Calendar.getInstance(); for (int i = 0; i < n; ++i) { String title = scanner.nextLine(); cal = Calendar.getInstance(); int min = scanner.nextInt(); cal.add(Calendar.MINUTE, -min); Date date = cal.getTime(); scanner.nextLine(); String text = scanner.nextLine(); int categoryIndex = scanner.nextInt(); scanner.nextLine(); TextNewsItem tni = new TextNewsItem(title, date, categories[categoryIndex], text); frontPage.addNewsItem(tni); } n = scanner.nextInt(); scanner.nextLine(); for (int i = 0; i < n; ++i) { String title = scanner.nextLine(); int min = scanner.nextInt(); cal = Calendar.getInstance(); cal.add(Calendar.MINUTE, -min); scanner.nextLine(); Date date = cal.getTime(); String url = scanner.nextLine(); int views = scanner.nextInt(); scanner.nextLine(); int categoryIndex = scanner.nextInt(); scanner.nextLine(); MediaNewsItem mni = new MediaNewsItem(title, date, categories[categoryIndex], url, views); frontPage.addNewsItem(mni); } // Execution String category = scanner.nextLine(); System.out.println(frontPage.toString()); for(Category c : categories) { System.out.println(frontPage.listByCategory(c).size()); } try { System.out.println(frontPage.listByCategoryName(category).size()); } catch(CategoryNotFoundException e) { System.out.println(e.getMessage()); } }}abstract class NewsItem {String title;Date date;Category category;public NewsItem(String title, Date date, Category category) {this.title = title;this.date = date;this.category = category;}public String getTeaser() {return "from Class News Item";}public String getTitle() {return title;}public Date getDate() {return date;}public Category getCategory() {return category;}public void setTitle(String title) {this.title = title;}public void setDate(Date date) {this.date = date;}}class TextNewsItem extends NewsItem {String text;public TextNewsItem(String title, Date date, Category category, String text) {super(title, date, category);this.text = text;}public String getText() {return text;}public void setText(String text) {this.text = text;}public String getTeaser() {Calendar cal = Calendar.getInstance();Date date = cal.getTime();if (text.length() > 80)return getTitle() + "\n" + (date.getTime() - getDate().getTime()) / 60 / 1000 + "\n" + text.substring(0, 80);elsereturn getTitle() + "\n" + (date.getTime() - getDate().getTime()) / 60 / 1000 + "\n" + text;}}class MediaNewsItem extends NewsItem {String url;int views;public MediaNewsItem(String title, Date date, Category category,String url, int views) {super(title, date, category);this.url = url;this.views = views;}public String getUrl() {return url;}public int getViews() {return views;}public void setUrl(String url) {this.url = url;}public void setViews(int views) {this.views = views;}@Overridepublic String getTeaser() {Calendar cal = Calendar.getInstance();Date date = cal.getTime();return getTitle() + "\n" + (date.getTime() - getDate().getTime()) / 60 / 1000 + "\n" + url + "\n"+ views;}}class Category {String name;public Category(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}}class FrontPage {ArrayList<NewsItem> newsItems = new ArrayList<NewsItem>();Category[] categories;public FrontPage(Category[] categories) {this.categories = categories;}void addNewsItem(NewsItem newsItem) {newsItems.add(newsItem);}ArrayList<NewsItem> listByCategory(Category category) {ArrayList<NewsItem> list = new ArrayList<NewsItem>();for (NewsItem ni : newsItems) {if (ni.getCategory().equals(category))list.add(ni);}return list;}public boolean check(String category) {for (Category c : categories) {if (c.getName().equals(category))return true;}return false;}ArrayList<NewsItem> listByCategoryName(String category)throws CategoryNotFoundException {if (!check(category))throw new CategoryNotFoundException(category);else {ArrayList<NewsItem> list = new ArrayList<NewsItem>();for (NewsItem ni : newsItems) {if (ni.getCategory().getName().equals(category))list.add(ni);}return list;}}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();for(NewsItem ni : newsItems){sb.append(ni.getTeaser() + "\n");}return sb.toString();}}class CategoryNotFoundException extends Exception {public CategoryNotFoundException(String category) {super("Category " + category +" was not found");}}Тежини (30 поени) Problem 1 (1 / 6) Да се имплементира класа BodyForm ко?а од влезен тек (стандарден влез, датотека, ...) ?е чита податоци за мере?а на тежината на неколку лу?е. Податоците за лу?ето и нивната тежина се дадени во следниот формат:name weight1 weight2 weight3..., (секо? човек може да има различен бро? на мере?а). Пример: James 81.3 90.8 87.9.Ваша задача е да ги имплементирате методите:BodyForm() - default конструкторvoid readData(InputStream inputStream) - метод за чита?е на податоцитеvoid printByWeight(OutputStream outputStream, int type) - метод ко? ги печати сите лу?е сортирани според тежината во растечки редослед. По завршува?е на печате?ето извршете flush() и не затвора?те (не извршува?те close()). Притоа ако аргументот type има вредност:1 се подредуваат според максималната измерена тежина2 се подредуваат според просечната измерена тежина (просек од сите измерени тежини).Печате?ето на лу?ето е во следниот формат:Формат:[name] MAX : [max.0] kg, AVG : [avg.0] kg import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.lang.reflect.Array;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Collections;import java.parator;import java.util.TreeMap;public class BodyFormTest {public static void main(String[] args) throws IOException {BodyForm bodyForm = new BodyForm();bodyForm.readData(System.in);System.out.println("BY MAX");bodyForm.printByWeight(System.out, 1);System.out.println("BY AVG");bodyForm.printByWeight(System.out, 2);}}// вашиот код овдеclass Player {double average;double max;String name;public Player(double average, double max, String name) {super();this.average = average;this.max = max;this.name = name;}public double getAverage() {return average;}public double getMax() {return max;}public String getName() {return name;}@Overridepublic String toString(){return String.format("%s MAX : %.1f kg, AVG : %.1f kg", name, max, average);}}class BodyForm {ArrayList<Player> playerList = new ArrayList<>();public BodyForm(){}public void readData(InputStream inputStream) throws IOException{BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));String line;float counter = 0;float average = 0;float max = 0;while((line = br.readLine()) != null){String parts[] = line.split(" ");for(int i = 1; i < parts.length; i++){if(max < Float.parseFloat(parts[i])) max = Float.parseFloat(parts[i]);counter += Float.parseFloat(parts[i]);}average = counter/(parts.length-1);playerList.add(new Player(average, max, parts[0]));counter = 0;max = 0;}br.close();}public void printByWeight(OutputStream outputStream, int type){PrintWriter printWriter = new PrintWriter(outputStream); if(type == 1){Collections.sort(playerList, new sortByMax());} else Collections.sort(playerList, new sortByAverage());for(Player p : playerList){printWriter.println(p.toString());}printWriter.flush();}}class sortByMax implements Comparator<Player>{@Overridepublic int compare(Player arg0, Player arg1) {// TODO Auto-generated method stubif(arg0.getMax() < arg1.getMax()) return -1;else return 1;}}class sortByAverage implements Comparator<Player>{@Overridepublic int compare(Player o1, Player o2) {if(o1.getAverage() < o2.getAverage()) return -1;else return 1;}}Циркуларна листа (35 поени) Problem 2 (0 / 0) Да се имплементира класа за генеричка циркуларна листа CircularList<T>. Класата треба да ги имплементира следните методи:CircularList(int n) - конструктор со еден аргумент ко? означува максимален капацитет на елементи во листата.void addElement(T element) - метод за додава?е нов елемент во листата. Секо? следен елемент се додава на кра?от од листата, но откако ?е се исполни капацитетот, секо? нареден елемент го заменува на?стариот елемент во листата. Пример за листа со капацитет од три елементи и додадени [1, 2, 3] на?стар елемент е 1 и истиот има индекс 0. По додава?ето на нов елемент 4 се добива листата [4, 2, 3] и на?стар елемент во листата станува 2, со што и неговиот индекс станува 0.void rotateLeft(int k) - се ротираат елементите на лево за k места. [1, 2, 3, 4] ротирана на лево за 2 места [3, 4, 1, 2]. void rotateRight(int k) - се ротираат елементите на десно за k места. [1, 2, 3, 4] ротирана на десно за 3 места [2, 3, 4, 1]. Методите за ротаци?а ако се повикаат на листа во ко?а не е исполнет капацитетот, треба да фрлат исклучок од вид InvalidRotationException.T getElement(int i) - го вра?а елементот на позици?а i. Позици?ата се смета според редоследот на додава?е на елементот. Елементот ко? е прв додаден (на?стар) има позици?а 0, додека елементот ко? е додаден последен има позици?а (n - 1). Ако методот се повика со позици?а ко?а е поголема или еднаква на бро?от на елементи во листата треба да се фрли исклучок од вид InvalidIndexException.String toString() - вра?а стринг репрезентаци?а на листата.import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Scanner;public class CircularListTest {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();CircularList<Integer> list = new CircularList<Integer>(n);try {list.rotateLeft(2);} catch (InvalidRotationException e) {System.out.println("InvalidRotationException");}for (int i = 0; i < n; ++i) {list.addElement(scanner.nextInt());}System.out.println(list);for (int i = 0; i < m; ++i) { int a = scanner.nextInt(); System.out.println("ADD " + a);list.addElement(a);System.out.println(list); }int r = scanner.nextInt();System.out.println("ROTATION LEFT " + r);try {list.rotateLeft(r);} catch (InvalidRotationException e) {System.out.println("InvalidRotationException");}System.out.println(list); r = scanner.nextInt();System.out.println("ROTATION RIGHT " + r);try {list.rotateRight(r);} catch (InvalidRotationException e) {System.out.println("InvalidRotationException");}System.out.println(list);int p = scanner.nextInt();System.out.println("ELEMENT ON POSITION " + p);try {System.out.println(list.getElement(p));} catch (InvalidIndexException e) {System.out.println("InvalidIndexException");} int x = scanner.nextInt(); System.out.println("ADD " + x); list.addElement(x); System.out.println(list); System.out.println("ELEMENT ON POSITION " + (p + 1));try {System.out.println(list.getElement(p + 1));} catch (InvalidIndexException e) {System.out.println("InvalidIndexException");}}}class CircularList<T> {private int n;private int index = 0;private ArrayList<T> list;public CircularList(int n) {list = new ArrayList<T>();this.n = n;}void addElement(T element){if(list.size() < n) {list.add(element);} else {if(index == list.size())index = 0;list.set(index, element);index++;}}void rotateLeft(int k) throws InvalidRotationException{if(list.size() != n) throw new InvalidRotationException();Collections.rotate(list, -k);if(index - k < 0)index = index + (index - k);elseindex = index - k;}void rotateRight(int k) throws InvalidRotationException{if(list.size() != n) throw new InvalidRotationException();Collections.rotate(list, k);index = (index + k) % n;}T getElement(int i) throws InvalidIndexException{if(i >= n) throw new InvalidIndexException();return list.get((index + i) % n);}@Overridepublic String toString() {return list.toString();}}class InvalidRotationException extends Exception {public InvalidRotationException(){super("InvalidRotationException");}}class InvalidIndexException extends Exception {public InvalidIndexException(){super("InvalidIndexException");}}Патна мрежа (35 поени) Problem 3 (0 / 5) Да се имплементира класа RoadNetwork коjа ?е jа опишува патната инфраструктура во една држава. Во класата се чуваат информации за државата, градовите и патиштата. За државата се чува името, а за секоj град се чува неговото име, броj на жители и ими?а на локации со кои е поврзан со директен пат како и должината на тоj пат. Класата треба да ги имплементира следните методи:RoadNetwork(String country) - конструктор со аргумент името на државатаvoid addCity(String cityName, int population, String[] locations, float[] distances) - се додава нов град, опишан со името, бро?от на жители и локациите до кои има директен пат до него, како и должината на то? пат.void search(String cityName) - пребарува град и ги печати информациите за градот (името, броjот на жители и листата на локации со коi е поврзан во растечки редослед). Доколку не постои градот се фрла исклучок од типот CityNotFoundException.float roadNetwork() - jа вра?а вкупната должина на сите директни патишта во државата. Патот од Скоп?е до Велес е различен од патот Велес до Скоп?е, така што и двата влегуваат во пресметката.void mostDense() - ги печати ими?ата на двата градови чии што коефициент коj се преметува со формулата (жители на град1 + жители на град2) / растоjание (ме?у град1 и град2), е наjголем.import java.util.ArrayList;import java.parator;import java.util.Map;import java.util.Scanner;import java.util.TreeMap;public class RoadNetworkTest {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String country = scanner.nextLine();RoadNetwork roadNetwork = new RoadNetwork(country);int n = scanner.nextInt();scanner.nextLine();for (int i = 0; i < n; ++i) {String line = scanner.nextLine();String[] parts = line.split(" ");String cityName = parts[0];int population = Integer.parseInt(parts[1]);String[] cities = new String[(parts.length - 2) / 2];float[] distances = new float[(parts.length - 2) / 2];int k = 0;for (int j = 2; j < parts.length; j += 2) {cities[k] = parts[j];distances[k++] = Float.parseFloat(parts[j + 1]);}roadNetwork.addCity(cityName, population, cities, distances);}System.out.println("SEARCH");String cityName = scanner.nextLine();scanner.close();try {roadNetwork.search(cityName);} catch (CityNotFoundException e) {System.out.println(e.getMessage());}System.out.println("ROAD NETWORK");System.out.printf("%.2f\n", roadNetwork.roadNetwork());System.out.println("MAX DENSE");roadNetwork.mostDense();}}// vasiot kod ovdeclass City {String name;int population;String[] locations;float[] distances;public City(String name, int population, String[] locations,float[] distances) {this.name = name;this.population = population;this.locations = locations;this.distances = distances;}public void sort() {float dis;String loc;for (int i = 0; i < distances.length; i++) {for (int j = 1; j < distances.length - i; j++) {if (distances[j - 1] > distances[j]) {dis = distances[j - 1];distances[j - 1] = distances[j];distances[j] = dis;loc = locations[j - 1];locations[j - 1] = locations[j];locations[j] = loc;}}}}public String getName() {return name;}public int getPopulation() {return population;}public String[] getLocations() {return locations;}public float[] getDistances() {return distances;}public float sum() {float sum = 0;for (int i = 0; i < distances.length; i++)sum += distances[i];return sum;}@Overridepublic String toString() {sort();StringBuilder sb = new StringBuilder();sb.append(name + "\n");sb.append(population + "\n");for (int i = 0; i < locations.length-1; i++) {sb.append(String.format("%s : %.1f km\n", locations[i], distances[i]));}sb.append(String.format("%s : %.1f km", locations[locations.length-1], distances[locations.length-1]));return sb.toString();}}class RoadNetwork {String country;TreeMap<String, City> cityInformations = new TreeMap<>();public RoadNetwork(String country) {this.country = country;}void addCity(String cityName, int population, String[] locations,float[] distances) {cityInformations.put(cityName, new City(cityName, population,locations, distances));}void search(String cityName) throws CityNotFoundException {if (!cityInformations.containsKey(cityName))throw new CityNotFoundException();elseSystem.out.println(cityInformations.get(cityName).toString());}float roadNetwork() {float sum = 0;for (Map.Entry<String, City> entry : cityInformations.entrySet()) {sum += entry.getValue().sum();}return sum;}void mostDense(){float max = 0;String city1 = "";String city2 = "";for(Map.Entry<String, City> entry : cityInformations.entrySet()){for(int i = 0; i < entry.getValue().getLocations().length; i++){if(cityInformations.containsKey(entry.getValue().getLocations()[i])) {float formula = (entry.getValue().getPopulation() + cityInformations.get(entry.getValue().getLocations()[i]).getPopulation()) / entry.getValue().getDistances()[i];if(max < formula){max = formula;city1 = entry.getKey();city2 = entry.getValue().getLocations()[i];}}}}System.out.println(String.format("%s - %s : %.2f", city1, city2, max));}}class CityNotFoundException extends Exception {public CityNotFoundException() {super("CityNotFoundException");}}Место за паркинг (40 поени) Problem 8 (5 / 6) Да се имплементира паркинг системот на еден град. За таа цел треба да се имплементираат класите:ParkingSector во ко?а се чуват информации за:кодот на секторот Stringбро?от на паркинг места intсите автомобили (регистрации) во ово? сектор ?CityParking во ко?а се чуваат информации за:името на градот Stringи сите паркинг сектори во то? град ?Во класата CityParking треба да се имплементираат следните методи:CityParking(String name) конструктор со аргумент име на градотvoid createSectors(String[] sectorNames, int[] counts) креира?е на паркинг сектори со ими?а String[] sectorNames и бро? на паркинг места int[] counts (двете низи се со иста големина)void addCar(String sectorName, int spotNumber, String registrationNumber) за додава?е автомобил со регистраци?а registrationNumber на позици?а spotNumber (притоа ако позици?ата не е во опсегот од 1 <= spotNumber <= бро?-на-паркинг-места треба да се фрли исклучок од тип InvalidSpotNumberException, ако позици?ата е зафатена од неко? друг автомобил тогаш се фрла исклучок од тип SpotTakenException, ако не постои сектор со даденото име се фрла исклучок од тип NoSuchSectorException)void findCar(String registrationNumber) за печате?е на секторот и бро?от на местото каде што е паркиран автомобилот со дадената регистраци?а (ако не се прона?де таков автомобил се фрла исклучок од тип CarNotFoundException) забелешка комплексноста на методот не треба да биде поголема од O(logn) toString() вра?а стринг во формат: Ime_na_gradKod_na_sektor : zafateni_mesta/parking_mesta //za site sektori vo nov redВо класата ParkingSector треба да се имплементираат следните методи:ParkingSector(String code, int count) конструктор со аргументи код на секторот и бро? на слободни местаи останати потребни методи за имплементаци?а на претходната класа...import java.util.Map;import java.util.Scanner;import java.util.TreeMap;public class ParkingTest {public static void main(String[] args) {String t;System.out.println(t);Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();scanner.nextLine();String[] sectorNames = new String[n];int[] counts = new int[n];for (int i = 0; i < n; ++i) {String[] parts = scanner.nextLine().split(" ");sectorNames[i] = parts[0];counts[i] = Integer.parseInt(parts[1]);}String name = scanner.nextLine();CityParking cityParking = new CityParking(name);cityParking.createSectors(sectorNames, counts);n = scanner.nextInt();scanner.nextLine();for (int i = 0; i < n; ++i) {String[] parts = scanner.nextLine().split(" ");String sectorName = parts[0];int spotNumber = Integer.parseInt(parts[1]);String registrationNumber = parts[2];try {cityParking.addCar(sectorName, spotNumber, registrationNumber);} catch (InvalidSpotNumberException e) {System.out.println(e.getMessage());} catch (SpotTakenException e) {System.out.println(e.getMessage());} catch (NoSuchSectorException e) {System.out.println(e.getMessage());}}n = scanner.nextInt();scanner.nextLine();for (int i = 0; i < n; ++i) {String registrationNumber = scanner.nextLine();try {cityParking.findCar(registrationNumber);} catch (CarNotFoundException e) {System.out.println(e.getMessage());}} System.out.println(cityParking);}}// Vasiot kod ovdeclass ParkingSector {String code;int count;TreeMap<String, Integer> registrations = new TreeMap<>();public ParkingSector(String code, int count) {this.code = code;this.count = count;}public String getCode() {return code;}public int getCount() {return count;}public TreeMap<String, Integer> getRegistrations() {return registrations;}public void addCar(String registrationNumber, int spotNumber){registrations.put(registrationNumber, spotNumber);}@Overridepublic String toString() {// TODO Auto-generated method stubreturn code + " : " + registrations.size() + "/" + count;}}class Informations {String sectorName;int spotNumber;public Informations(String sectorName, int spotNumber) {this.sectorName = sectorName;this.spotNumber = spotNumber;}public String getSectorName() {return sectorName;}public int getSpotNumber() {return spotNumber;}}class CityParking {String name;TreeMap<String, ParkingSector> sectors = new TreeMap<>();TreeMap<String, Informations> registrations = new TreeMap<>();public CityParking(String name) {this.name = name;}void createSectors(String[] sectorNames, int[] counts){for(int i = 0; i < sectorNames.length; i++) {sectors.put(sectorNames[i], new ParkingSector(sectorNames[i], counts[i]));}}void addCar(String sectorName, int spotNumber, String registrationNumber) throws InvalidSpotNumberException, SpotTakenException, NoSuchSectorException{if(!sectors.containsKey(sectorName))throw new NoSuchSectorException(sectorName);else if(spotNumber < 1 || spotNumber > sectors.get(sectorName).getCount()) throw new InvalidSpotNumberException();else if(sectors.get(sectorName).getRegistrations().containsValue(spotNumber))throw new SpotTakenException();else {sectors.get(sectorName).addCar(registrationNumber, spotNumber);registrations.put(registrationNumber, new Informations(sectorName, spotNumber));}}void findCar(String registrationNumber) throws CarNotFoundException{if(!registrations.containsKey(registrationNumber))throw new CarNotFoundException(registrationNumber);elseSystem.out.println(registrations.get(registrationNumber).getSectorName() + " : " + registrations.get(registrationNumber).getSpotNumber());}@Overridepublic String toString() {// TODO Auto-generated method stubStringBuilder sb = new StringBuilder();sb.append(name + '\n');for(Map.Entry<String, ParkingSector> entry : sectors.entrySet()){sb.append(entry.getValue().toString() + '\n');}return sb.toString();}}class InvalidSpotNumberException extends Exception {public InvalidSpotNumberException(){super("Invalid spot number");}}class SpotTakenException extends Exception {public SpotTakenException(){super("Spot is taken already!");}}class NoSuchSectorException extends Exception {public NoSuchSectorException(String sectorName){super("No sector with name " + sectorName);}}class CarNotFoundException extends Exception {public CarNotFoundException(String registrationNumber){super("Car with RN " + registrationNumber + " not found");}} ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download

To fulfill the demand for quickly locating and searching documents.

It is intelligent file search solution for home and business.

Literature Lottery