Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Stadium Problem 7 (2 / 15)
- Да се имплементира систем за билети за стадион. За таа цел треба да се имплементираат класите:
- Sector во која се чуват информации за:
- кодот на секторот String
- бројот на места за седење int
- информации за зафатеност на местата за седење ?
- Stadium во која се чуваат информации за:
- името на стадионот String
- и сите сектори во стадионот ?
- Во класата Stadium треба да се имплементираат следните методи:
- Stadium(String name) конструктор со аргумент име на стадионот
- void createSectors(String[] sectorNames, int[] sizes) креирање на сектори со имиња String[] sectorNames и број на места int[] sizes (двете низи се со иста големина)
- void buyTicket(String sectorName, int seat, int type) за купување билет од проследениот тип (type, 0 - неутрален, 1 - домашен, 2 - гостински), во секторот sectorName со број на место seat (местото секогаш е со вредност во опсег 1 - size). Ако местото е зафатено (претходно е купен билет на ова место) се фрла исклучок од вид SeatTakenException. Исто така ако се обидеме да купиме билет од тип 1, во сектор во кој веќе има купено билет од тип 2 (и обратно) се фрла исклучок од вид SeatNotAllowedException.
- void showSectors() ги печати сите сектори сортирани според бројот на слободни места во опаѓачки редослед (ако повеќе сектори имаат ист број на слободни места, се подредуваат според името).
- ===================================================================================================================
- import java.util.ArrayList;
- import java.util.Comparator;
- import java.util.Hashtable;
- import java.util.Scanner;
- @SuppressWarnings("serial")
- class SeatNotAllowedException extends RuntimeException {}
- @SuppressWarnings("serial")
- class SeatTakenException extends RuntimeException {}
- class Sector {
- final String code;
- int seats;
- ArrayList<Integer> seatsTaken;
- boolean type [];
- Sector(String code, int seats) {
- this.code = code;
- this.seats = seats;
- type = new boolean[3];
- this.seatsTaken = new ArrayList<>();
- }
- int getFreeSeats() {
- return seats - seatsTaken.size();
- }
- double getPercent() {
- return (1 - (1.0 * getFreeSeats() / seats)) * 100;
- }
- void buyTicket(int seat, int seatType) {
- if (seatsTaken.contains(seat - 1))
- throw new SeatTakenException();
- if (seatType == 1) {
- if (type[2])
- throw new SeatNotAllowedException();
- }
- if (seatType == 2) {
- if (type[1])
- throw new SeatNotAllowedException();
- }
- seatsTaken.add(seat - 1);
- type[seatType] = true;
- }
- @Override
- public String toString() {
- return String.format("%s\t%d/%d\t%.1f%%", code, getFreeSeats(), seats, getPercent());
- }
- }
- class Stadium {
- final String name;
- Hashtable<String, Sector> sectors;
- final Comparator<Sector> compareByFreeSeats = (s1, s2) -> {
- if (Integer.compare(s1.getFreeSeats(), s2.getFreeSeats()) != 0)
- return Integer.compare(s2.getFreeSeats(), s1.getFreeSeats());
- else
- return s1.code.compareTo(s2.code);
- };
- Stadium(String name) {
- this.name = name;
- sectors = new Hashtable<>();
- }
- void createSectors(String [] sectorNames, int [] sizes) {
- for (int i = 0; i < sectorNames.length; i++)
- sectors.put(sectorNames[i], new Sector(sectorNames[i] , sizes[i]));
- }
- void buyTicket(String sectorName, int seat, int type) {
- this.sectors
- .values()
- .stream()
- .filter(t -> t.code.equals(sectorName))
- .findFirst()
- .get()
- .buyTicket(seat, type);
- }
- void showSectors() {
- this.sectors
- .values()
- .stream()
- .sorted(compareByFreeSeats)
- .forEach(System.out :: println);
- }
- }
- public class StaduimTest {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- int n = scanner.nextInt();
- scanner.nextLine();
- String[] sectorNames = new String[n];
- int[] sectorSizes = new int[n];
- String name = scanner.nextLine();
- for (int i = 0; i < n; ++i) {
- String line = scanner.nextLine();
- String[] parts = line.split(";");
- sectorNames[i] = parts[0];
- sectorSizes[i] = Integer.parseInt(parts[1]);
- }
- Stadium stadium = new Stadium(name);
- stadium.createSectors(sectorNames, sectorSizes);
- n = scanner.nextInt();
- scanner.nextLine();
- for (int i = 0; i < n; ++i) {
- String line = scanner.nextLine();
- String[] parts = line.split(";");
- try {
- stadium.buyTicket(parts[0], Integer.parseInt(parts[1]),
- Integer.parseInt(parts[2]));
- } catch (SeatNotAllowedException e) {
- System.out.println("SeatNotAllowedException");
- } catch (SeatTakenException e) {
- System.out.println("SeatTakenException");
- }
- }
- stadium.showSectors();
- }
- }
- ===============================================================================================================
- ample input
- 5
- Camp Nou
- A;1000
- B;1000
- C;1000
- D;1000
- E;1000
- 10
- A;1;1
- A;2;1
- A;1;1
- A;3;0
- A;4;2
- B;1;1
- C;2;2
- D;1;1
- D;2;0
- D;3;0
- ===================================================================================================================
- Sample output
- SeatTakenException
- SeatNotAllowedException
- E 1000/1000 0.0%
- B 999/1000 0.1%
- C 999/1000 0.1%
- A 997/1000 0.3%
- D 997/1000 0.3%
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement