Il punto è che facendo 3 volte mensola.setVolume con lo stesso libro/np, il primo probabilmente (anzi quasi certamente, da quanto dici) ha successo e poi chiaramente il secondo fallisce con -2. Quindi il problema è l'uso sbagliato ... non tanto il metodo setVolume in sé.
Riguardo il setVolume ci sono 2 finezze:
- Usa || invece che | . Il primo è il OR logico con comportamento "short-circuit". Se posizione<0 è già true, non perde tempo a valutare l'altro operando.
- NUM_MAX_VOLUMI lo intendi come il numero massimo di volumi oppure come la posizione massima che è ancora lecita? Perché se lo si intende (e dal nome io penserei così) come il numero massimo, allora la sua posizione è esclusa (essendo zero-based), quindi sarebbe più corretto posizione >= NUM_MAX_VOLUMI