Untitled
unknown
java
2 years ago
4.6 kB
3
Indexable
package ee.ttu.algoritmid.events; import java.util.*; public class Events { private final int maxParticipants; private final Map<Event, Integer> eventsMap = new HashMap<>(); public Events(int maxParticipants) { // mitu osalejat on this.maxParticipants = maxParticipants; // mitu max saab olla eventis } public void registerParticipant(String eventName, int eventLengthMinutes, boolean freeTickets) { Event event = new Event(eventName, eventLengthMinutes, freeTickets); eventsMap.putIfAbsent(event, 0); //kui map on tühi, siis paneb esimeseks osalejate väärtuseks 0 if (eventsMap.get(event) < maxParticipants) { //kui osalejate arv vaiksem kui max eventsMap.put(event, eventsMap.get(event) + 1); //ainult siis liida üks osaleja juurde } } public int eventPopularity(String eventName, int eventLengthMinutes, boolean freeTickets) { Event event = new Event(eventName, eventLengthMinutes, freeTickets); if (eventsMap.get(event) != null) { //kui osalejate arv ei ole null, siis väljasta osalejate arv return eventsMap.get(event); } return 0; } public int getTop1Participants() { Collection<Integer> eventParticipants = eventsMap.values(); //teen objekti eventidest ja osalejate arvust try { return Collections.max(eventParticipants); } catch (NoSuchElementException e) { return 0; // kui pole evente siis return 0 } } public List<Integer> getTop2Participants() { // top2 kõige suurema osalejate arvuga evendid Collection<Integer> eventParticipants = eventsMap.values(); List<Integer> participantList = new ArrayList<>(eventParticipants); //panen objecti arrayListi, et saaksin sortida Collections.sort(participantList, Collections.reverseOrder()); //sordin ära, kahanevas järjekorras if (participantList.size() == 2) { return participantList; } if (participantList.size() > 2) { return participantList.subList(0, 2); //võtab listist 0 ja 1 indeksi ehk 2 suurimat osalejate arvuga eventi } if (participantList.size() == 1) { //kui on ainult 1 event, siis väljasta selle osalejate arv participantList.add(0); //lisa listi 0 return participantList; } return new ArrayList<>() { //kui pole ühtegi eventi siis lisab kaks nulli { add(0); add(0); } }; } public static void main(String[] args) { Events events = new Events(4); events.registerParticipant("Cool Event", 10, false); events.registerParticipant("Cool Event", 10, false); events.registerParticipant("Cool Event", 10, false); events.registerParticipant("Cool Event", 10, false); events.registerParticipant("Not So Cool Event", 10, false); events.registerParticipant("Not So Cool Event", 10, false); System.out.println(events.eventPopularity("Cool Event", 10, false)); System.out.println(events.getTop1Participants()); System.out.println(events.getTop2Participants()); } } class Event { //klass ühe ürituse jaoks, mis sisldab kolme muutujat (returnib hashcode-i, mida kasutan hashmapi keyna) private final String eventName; private final boolean freeTickets; private final int eventLengthInMinutes; private final int hashCode; //et ülemised kolm muutujat üheks liita (üks ID ehk key kogu eventile, mille value on: mitu osalejat seal on) public Event(String eventName, int eventLengthMinutes, boolean freeTickets) { this.eventName = eventName; this.eventLengthInMinutes = eventLengthMinutes; this.freeTickets = freeTickets; this.hashCode = Objects.hash(eventName, eventLengthMinutes, freeTickets); //kõik ülemised kolm siia kokku üheks } @Override //lisa meetod hashcode genereerimiseks public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Event that = (Event) o; return eventName.equals(that.eventName) && eventLengthInMinutes == that.eventLengthInMinutes && freeTickets == that.freeTickets; } @Override //lisa meetod hashcode genereerimiseks public int hashCode() { return this.hashCode; } }
Editor is loading...