Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Да се имплементира систем за билети за стадион. За таа цел треба да се имплементираат класите:
- 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.Arrays;
- import java.util.Comparator;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Scanner;
- class Sector {
- String name;
- int total;
- Map<Integer, Integer> seatTaken;
- public Sector(String name, int total) {
- this.name = name;
- this.total = total;
- this.seatTaken = new HashMap<>();
- }
- public int freeSeats() {
- return total - seatTaken.size();
- }
- @Override
- public String toString() {
- double d = (double)seatTaken.size() / (total/100);
- return String.format("%s\t%d/%d\t%.1f%%", name, freeSeats(), total, d);
- }
- }
- class Stadium {
- String name;
- Map<String, Sector> sectors;
- public Stadium(String name) {
- this.name = name;
- this.sectors = new HashMap<>();
- }
- public void createSectors(String[] sectorNames, int[] sizes) {
- for (int i = 0; i < sectorNames.length; i++) {
- Sector s = new Sector(sectorNames[i], sizes[i]);
- sectors.put(sectorNames[i], s);
- }
- }
- public void buyTicket(String sectorName, int seat, int type) throws SeatTakenException, SeatNotAllowedException {
- Sector s = sectors.get(sectorName);
- if(s.seatTaken.containsKey(seat))
- throw new SeatTakenException();
- if(type != 0 ) {
- if(s.seatTaken.values().stream().anyMatch(i -> i> 0&&i != type))
- throw new SeatNotAllowedException();
- }
- s.seatTaken.put(seat, type);
- }
- public void showSectors() {
- sectors.values().stream().sorted(Comparator.comparing(Sector::freeSeats).reversed().thenComparing(s -> s.name)).forEach(System.out::println);
- }
- }
- class SeatNotAllowedException extends Exception {
- public SeatNotAllowedException() {
- }
- }
- class SeatTakenException extends Exception {
- public SeatTakenException() {
- }
- }
- 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();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment