Buenas tardes! Tenía una consulta del ejercicio del título (https://docs.google.com/document/d/1YIFT2mM8OxNUCy605EBaVmfdgqnWM4_MdFS5qqrEa2k/)
Hice el ejercicio y las salidas coinciden con las del tester, pero mi implementación es distinta a la de la solución, por lo que adjunto la misma y pido su corrección.
Muchas gracias!
public class ReimbursementTracker {
private final HashMap<String, Client> clients = new HashMap<>();
private boolean isRegistered(String name){
return clients.containsKey(name);
}
private void clientExists(String name){
if(!isRegistered(name)){
throw new IllegalArgumentException("Client is not registered.");
}
}
public void registerClient(String name, int cap){
if(isRegistered(name)){
throw new IllegalArgumentException("Client already registered.");
}
clients.put(name, new Client(name, cap));
}
public int getRemainingReimbursement(String name, YearMonth ym){
clientExists(name);
return clients.get(name).getMonthRemainingReimbursements(ym);
}
public void addReimbursement(String name, YearMonth ym, int amount){
clientExists(name);
clients.get(name).addMonthReimbursements(ym, amount);
}
public Set<Map.Entry<YearMonth, Integer>> getReimbursements(String name, YearMonth from, YearMonth toExc){
clientExists(name);
return clients.get(name).getReimbursementsRange(from, toExc).entrySet();
}
}
public class Client {
private final String name; //Innecesario, pero lo hago igual.
private final int cap; //Tope
private SortedMap<YearMonth, Integer> reimbursements = new TreeMap<>();
public Client(String name, int cap){
this.name=name;
this.cap=cap;
}
public int getMonthReimbursements(YearMonth ym){
return reimbursements.getOrDefault(ym, 0);
}
public void addMonthReimbursements(YearMonth ym, int amount){
int newReimbursements = getMonthReimbursements(ym) + amount;
if(newReimbursements > cap){
throw new IllegalArgumentException("Reimbursement surpasses month cap.");
}
reimbursements.put(ym, newReimbursements);
}
public int getMonthRemainingReimbursements(YearMonth ym){
return cap - getMonthReimbursements(ym);
}
public Map<YearMonth, Integer> getReimbursementsRange(YearMonth from, YearMonth toExc){
return reimbursements.subMap(from, toExc);
}
}
Buenas tardes! Tenía una consulta del ejercicio del título (https://docs.google.com/document/d/1YIFT2mM8OxNUCy605EBaVmfdgqnWM4_MdFS5qqrEa2k/) Hice el ejercicio y las salidas coinciden con las del tester, pero mi implementación es distinta a la de la solución, por lo que adjunto la misma y pido su corrección. Muchas gracias!