Ciao!
L'utilizzo del "default" non è sempre obbligatorio. Ad esempio nel tuo caso non lo è (però puoi comunque metterlo), mentre nel codice qua sotto lo è, altrimenti da un errore in compilazione.
public Integer getInt(int n){
switch (n) {
case 1:
return new Integer(1);
case 2:
return new Integer(2);
case 3:
return new Integer(3);
default:
return new Integer(0); //se non ci fosse il default, cosa restituirebbe questo metodo?
}
}
Per tornare alla tua domanda, anche se metti il default, puoi lasciare Math.random()*4 e semplicemente il default non verrà mai richiamato prima consideri tutti i possibili casi attraverso i vari "case". Anzi, dal mio punto di vista sarebbe sbagliato mettere Math.random()*5 per una questione semantica, ovvero che un semaforo ha 4 stati e non 5 (tant'è che nel default hai giustamente messo stato = " ", ovvero una stringa che ti rappresenta uno stato non meglio definito)