Ok, ho scritto questo codice

codice:
public void ottimizzaOstello() {
        int r = -1; // in questo modo non si 
        int s = -1; // confondo con stanza e letto 
        
        for (int stanza=0; stanza<10; stanza++) {
            for (int letto=0; letto<5; letto++) {
                if (lettoLibero[stanza][letto] = false) { // il letto è libero
                    lettoLibero[stanza][letto] = lettoLibero[r][s]; // salvo temporaneamente il letto libero
                }
                
                else {
                    if (lettoLibero[stanza][letto] = true && r == -1 && s == -1) { //se il letto è occupato e non ci sono stanze 
                        return;                                                       //libere, il letto viene ignorato 
                    }
                }
                
                else {
                    if (lettoLibero[stanza][letto] = true && r != -1 && s != -1) {
                        lettoLibero[r][s] = lettoLibero[stanza][letto] ;
                        lettoLibero[stanza][letto] = false; // il letto ora è libero                    
                    }
                }
            }
        }
    }
Mi sono aiutato con due var per memorizzare il letto libero, ma credo di sbagliare perché poi non assegno quelle variabili come letti occupati.


EDIT: ho visto solo ora la tua risposta, vedrò di correggere