👤

Poate cineva sa gaseasca greseala in acest cod va rog, JAVA
Doar clasa Planificator trebuie editata

Trebuie să implementezi o clasă Planificator care conține o singură metodă, planifica(). Metoda primește ca parametru o listă de obiecte de tip Meeting, implementate anterior și modifică lista astfel încât ea să conțină doar meeting-urile care pot fi planificate într-un singur meeting room, astfel încât ele să nu se suprapună, sortate crescător în funcție de data de început. Soluția găsită trebuie să conțină un număr maxim de meeting-uri.


În cazul in care există mai multe soluții cu număr maxim de meeting-uri, să se găsească soluția care are șirul format din datele de sfârșit ale meeting-urilor cel mai mic lexicografic. În caz de egalitate între datele de sfârșit, se cere meeting-ul cu data de început cea mai mică.


Două meetinguri cu date de început în ordine crescătoare se suprapun dacă data de început al celui de-al doilea este mai mică sau egală decât data de sfârșit al primului.


Codul tău trebuie să conțină doar definiția clasei Planificator și ale unor eventuale clase ajutătoare.

import java.text.*;
import java.util.*;
class Meeting implements Comparable {
private Calendar starting, ending;
public Meeting(Calendar starting, Calendar ending) {
if (starting.compareTo(ending) > 0) {
throw new IllegalArgumentException("Invalid Data");
}
this.starting = starting;
this.ending = ending;
}
public Calendar getStarting() {
return starting;
}
public Calendar getEnding() {
return ending;
}
public int compareTo(Meeting m) {
return this.starting.compareTo(m.getStarting());
}
public String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
return sdf.format(starting.getTime()) + " -> " + sdf.format(ending.getTime());
}
}

class Planificator{
public static void planifica(List meetinguri) {
Collections.sort(meetinguri, new Comparator () {
@Override
public int compare(Meeting a, Meeting b) {
if (a.getInceput().equals(b.getInceput())) {
return a.getSfarsit().compareTo(b.getSfarsit());
} else {
return a.getInceput().compareTo(b.getInceput());
}
}
});

for (int i = 1; i < meetinguri.size(); ++i) {
Meeting a = meetinguri.get(i);
Meeting b = meetinguri.get(i - 1);
if (a.getInceput().get(Calendar.YEAR) == b.getSfarsit().get(Calendar.YEAR)) {
if (a.getInceput().get(Calendar.MONTH) == b.getSfarsit().get(Calendar.MONTH)) {
if (a.getInceput().get(Calendar.DATE) < b.getSfarsit().get(Calendar.DATE)) {
meetinguri.remove(a);
}
} else if (a.getInceput().get(Calendar.MONTH) < b.getSfarsit().get(Calendar.MONTH)) {
meetinguri.remove(a);
}
} else if (a.getInceput().get(Calendar.YEAR) < b.getSfarsit().get(Calendar.YEAR)) {
meetinguri.remove(a);
}
}
}
}
public class Main {
public static void main(String[] args) throws Exception {
try {
List l = new ArrayList<>();
l.add(new Meeting(new GregorianCalendar(1, 2, 3),
new GregorianCalendar(2, 2, 3)));
l.add(new Meeting(new GregorianCalendar(1, 2, 3),
new GregorianCalendar(5, 2, 3)));
l.add(new Meeting(new GregorianCalendar(3, 2, 3),
new GregorianCalendar(5, 2, 3)));
Scheduler.schedule(l);
System.out.println(l); // [03/03/0001 12:00:00 -> 03/03/0002 12:00:00, 03/03/0003 12:00:00 -> 03/03/0005 12:00:00] this is a test from platform, if we run the code with the added information, we are supposed to have this on output.
} catch (IllegalArgumentException e) {
System.out.print(e.getMessage());
}
}
}
Daca fac testul acesta
l.add(new Meeting(new GregorianCalendar(5, 2, 3),

new GregorianCalendar(5, 2, 3)));

l.add(new Meeting(new GregorianCalendar(6, 2, 3),

new GregorianCalendar(7, 2, 3)));

l.add(new Meeting(new GregorianCalendar(4, 2, 3),

new GregorianCalendar(5, 2, 3)));

l.add(new Meeting(new GregorianCalendar(6, 2, 7),

new GregorianCalendar(6, 2, 7)));


Outputul este " [03/03/0004 12:00:00 -> 03/03/0005 12:00:00, 03/03/0005 12:00:00 -> 03/03/0005 12:00:00, 03/03/0006 12:00:00 -> 03/03/0007 12:00:00] "

in loc de

"[03/03/0004 12:00:00 -> 03/03/0005 12:00:00, 07/03/0006 12:00:00 -> 07/03/0006 12:00:00]