Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Календар на настани (35 поени) Problem 3 (1 / 26)
- Да се имплементира класа за календар на настани 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) со бројот на настани во тој месец.
- =================================================================================================================
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Scanner;
- import java.util.TreeSet;
- @SuppressWarnings("serial")
- class WrongDateException extends RuntimeException {
- public WrongDateException(String msg) {
- super(msg);
- }
- public String getMessage() {
- return super.getMessage();
- }
- }
- class Event implements Comparable<Event>{
- private Date date;
- private String name, location;
- public Event(String name, String location, Date date) {
- this.date = date;
- this.name = name;
- this.location = location;
- }
- public String getName() {
- return this.name;
- }
- public Date getDate() {
- return this.date;
- }
- @Override
- public String toString() {
- DateFormat df = new SimpleDateFormat("dd MMM, YYY HH:mm");
- return String.format("%s at %s, %s", df.format(date), this.location, this.name);
- }
- @Override
- public int compareTo(Event arg0) {
- int w = Long.compare(date.getTime(), arg0.getDate().getTime());
- if (w != 0)
- return w;
- else
- return name.compareTo(arg0.name);
- }
- }
- class EventCalendar {
- HashMap<Integer, Integer> monthlyNumbers;
- HashMap<String, TreeSet<Event>> events;
- int year;
- EventCalendar(int year) {
- this.year = year;
- monthlyNumbers = new HashMap<>();
- events = new HashMap<>();
- }
- void addEvent(String name, String location, Date date) {
- if (date.getYear() != year - 1900)
- throw new WrongDateException("Wrong date: " + date.toString().replace("GMT", "UTC"));
- else {
- monthlyNumbers.computeIfPresent(date.getMonth(), (key, value) -> ++value);
- monthlyNumbers.putIfAbsent(date.getMonth(), 1);
- String eventKey = String.format("%d %d", date.getDate(), date.getMonth());
- events.putIfAbsent(eventKey, new TreeSet<Event>());
- events.computeIfPresent(eventKey, (key, value)
- -> {
- value.add(new Event(name, location, date));
- return value;
- });
- }
- }
- void listEvents(Date date) {
- String key = String.format("%d %d", date.getDate(), date.getMonth());
- if (events.get(key) != null)
- events.get(key).stream()
- .forEach(System.out :: println);
- else
- System.out.println("No events on this day!");
- }
- void listByMonth() {
- for (int i = 1; i < 13; i++) {
- if (monthlyNumbers.get(i - 1) != null)
- System.out.printf("%d : %d\n", i, monthlyNumbers.get(i - 1));
- else
- System.out.printf("%d : %d\n", i, 0);
- }
- }
- }
- public class EventCalendarTest {
- 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();
- }
- }
- // vashiot kod ovde
- ====================================================================================================================
- Sample input
- 10
- 2013
- Taksirat 15;Skopje;28.12.2013 22:00
- Rush Premiera;Cineplex;14.02.2013 11:00
- Vinoskop;Vero Centar;15.02.2013 21:00
- Skopje Gori;Kale;14.04.2013 15:30
- Brucoshka Zabava;FINKI;16.04.2014 14:20
- Bela Nokj;Skopje;12.06.2013 18:30
- Stand Up;Expo Center;15.02.2013 19:30
- Cinedays;Kino Milenium;12.01.2013 14:00
- Koncert Arhangel;Boris Trajkovski;15.02.2013 19:45
- Skopje Jazz Festival;Univerzalna Sala;12.08.2013 22:30
- 15.02.2013 00:00
- ====================================================================================================================
- Sample output
- Wrong date: Wed Apr 16 14:20:00 UTC 2014
- 15 Feb, 2013 19:30 at Expo Center, Stand Up
- 15 Feb, 2013 19:45 at Boris Trajkovski, Koncert Arhangel
- 15 Feb, 2013 21:00 at Vero Centar, Vinoskop
- 1 : 1
- 2 : 4
- 3 : 0
- 4 : 1
- 5 : 0
- 6 : 1
- 7 : 0
- 8 : 1
- 9 : 0
- 10 : 0
- 11 : 0
- 12 : 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement