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.
Semnătură metodă:
public static void planifica(List meetinguri)
Atenție
Nu mai e nevoie să implementezi clasa Meeting, ea va fi inclusă automat în codul trimis de tine și va fi definită în felul următor:
class Meeting implements Comparable {
private Calendar inceput, sfarsit;
public Meeting(Calendar inceput, Calendar sfarsit) {
if (inceput.compareTo(sfarsit) > 0) }
throw new IllegalArgumentException("Date invalide");
}
this.inceput = inceput;
this.sfarsit = sfarsit;
}
public Calendar getInceput() {
return inceput;
}
public Calendar getSfarsit() {
return sfarsit;
}
public int compareTo(Meeting m) {
return this.inceput.compareTo(m.getInceput());
}
public String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
return sdf.format(inceput.getTime()) + " -> " + sdf.format(sfarsit.getTime());
}
}
Codul tău trebuie să conțină doar definiția clasei Planificator și ale unor eventuale clase ajutătoare.
Exemplu
import java.text.*;
import java.util.*;
class Meeting implements Comparable {
private Calendar inceput, sfarsit;
public Meeting(Calendar inceput, Calendar sfarsit) {
if (inceput.compareTo(sfarsit) > 0) {
throw new IllegalArgumentException("Date invalide");
}
this.inceput = inceput;
this.sfarsit = sfarsit;
}
public Calendar getInceput() {
return inceput;
}
public Calendar getSfarsit() {
return sfarsit;
}
public int compareTo(Meeting m) {
return this.inceput.compareTo(m.getInceput());
}
public String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
return sdf.format(inceput.getTime()) + " -> " + sdf.format(sfarsit.getTime());
}
}
// clasele tale aici
public class prog {
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)));
Planificator.planifica(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]
} catch (IllegalArgumentException e) {
System.out.print(e.getMessage());
}
}
}