Salve a tutti!
Sto provando a risolvere un vecchio tema d'esame che recita così:

Scrivere una classe Ostello per modellare un ostello. L'ostello ha 50 letti in totale, distribuiti in 10 stanze da 5 letti ciascuna: ogni letto può essere libero o occupato.
Lo stato del letti nelle stanze deve essere modellato con una matrice di booleani (le righe sono le stanze e le colonne i letti). All'inizio tutti i letti sono liberi.

Metodo checkin: La classe dispone di un metodo checkin(int stanza, int letto) come mostrato di seguito, che permette di occupare un derminato letto in una determinata stanza.

public boolean checkin (int stanza, int letto) {
if (stanza >= 0 & stanza < 10 & letto >= 0 & letto <5) {
lettoLibero[stanza][letto] = false;
return true;
}
}
return false;
}

Il metodo controlla che i valori letto e stanza siano corretti e che il letto selezionato sia libero. Il metodo ritorna true se il letto viene occupato, false altrimenti.

Metodo ottimizzaOstello
L'ostello vuole minimizzare il numero di stanza usate. A tal fine la classe deve disporre di un metodo void ottimizzaOstello() che sposti tutti i clienti nelle prime stanza libere (a partire dalla prima stanza e dal primo letto). Per esempio, se c'è un solo cliente per ogni stanza (quindi in totale ci sono 10 clienti), il metodo sposta tutti i clienti nelle prime stanze.

Per il momento questo è il codice che ho scritto:
codice:
public class Ostello {    boolean lettoLibero[][];
    
    public Ostello() {
        //all inizio tutti i letti sono liberi
        for (int stanza=0; stanza<10; stanza++) {
            for (int letto=0; letto<5; letto++) {
                lettoLibero[stanza][letto] = false; 
            }
        }
    }
    
    public boolean checkin (int stanza, int letto) {
        if(stanza >= 0 & stanza < 10 & letto >=0 & letto <5) {
            if(lettoLibero[stanza][letto]) {
                lettoLibero[stanza][letto] = false;
                return true;
            }
        }
        return false;
    }
Non riesco ad immaginare come scrivere il metodo ottimizzaOstello. Il ragionamento che ho fatto è il seguente:

1. Se il letto è libero, cerca nella stanza successiva un letto occupato
2. Spostalo nella prima stanza libera e imposta il letto occupato come libero
3. Continua nella ricerca

Quando cerco di trasformare questo ragionamento in codice, si trasforma solo in un paio di cicli for che si ripetono

Mi date una mano? Grazie..