POO-ITBA / 2024_01

Consultas 1C 2024
0 stars 0 forks source link

Repaso Primer Parcial Ej 1 #5

Open ldicandia opened 5 months ago

ldicandia commented 5 months ago

Buenas, queria saber si estaba bien resuelto antes de ver las soluciones image

image

public class UniqueExam extends Exam{
    public UniqueExam(String name){
        super(name);
    }

    @Override
    public void enroll(String student) {
        if(isEnrolled(student)){
            return;
        }
        super.enroll(student);
    }
}
public class LimitedExam extends UniqueExam{
    private String[] pending;
    private int dim;
    private final int limit;
    private static final int INITIAL_DIM = 5;

    public LimitedExam(String name, int limit){
        super(name);
        this.pending = new String[INITIAL_DIM];
        this.limit = limit;
    }

    @Override
    public void enroll(String student) {
        if(super.getEnrolledCount() == limit){
            if(dim == INITIAL_DIM){
                resize();
            }
            pending[dim++] = student;
            return;
        }
        super.enroll(student);
    }

    @Override
    public void unenroll(String student){
        super.unenroll(student);

        if(!super.isEnrolled(student) && isPending(student)){
            for(int i = 0 ; i < pending.length-1 ; i++){
                if(student.equals(pending[i])) {
                    pending[i] = pending[i + 1];
                }
            }
            dim--;
            return;
        }

        enroll(pending[0]);
        for (int i = 0; i < pending.length - 1; i++) {
            pending[i] = pending[i + 1];
        }
        dim--;

    }

    public String[] getPendingStudents(){
        return Arrays.copyOf(pending, dim);
    }

    private void resize() {
        pending = Arrays.copyOf(pending, pending.length + INITIAL_DIM);
    }

    private boolean isPending(String name){
        for(int i = 0; i < dim; i++) {
            if(pending[i].equals(name)) {
                return true;
            }
        }
        return false;
    }
}