codice:
(char) ((int) 'g' +Math.random()* ((int) 'm' -(int) 'g'+1));
guardalo pezzo per pezzo (e poi vediamo che significa).
(char) indica il tipo di ritorno, ti impone di trattarlo come carattere
se questo è chiaro passiamo al resto
codice:
((int) 'g' +Math.random()* ((int) 'm' -(int) 'g'+1));
e ti consiglio di partire dalla parte più interna
((int) 'm' -(int) 'g'+1))
tu vuoi qualcosa che vada da 'g' ad 'm', per cui ti serve IMPORRE un intervallo entro il quale contenere il tuo numero random. Devi partire dal successivo di g e fermarti ad m, siccome in numeri m > g e l'intervallo deve essere un valore intero, ergo m - g.
potevi benissimo fare anche
codice:
int emme = (int) 'm';
int gi = (int) 'g';
Math.random() * (emme - gi + 1)
ottenendo lo stesso result (che magari era un po' meno ostico da leggere.
La regola generele per generare numeri random vuole
Math.random() * interval
dove interval spesso è qualcosa del tipo
int interval = max - min ;
Spesso min = 0 max = 1 quindi hai un numero puro random (anche se qualcuno potrebbe obiettare su questa affermazione).
Il +1 indica che gi non lo comprendi nell'intervallo.
infine
codice:
((int) 'g' +Math.random()* ((int) 'm' -(int) 'g'+1));
la somma: se non la metti prendi solo un numero random che si ferma a emme, dovendo andare da gi ad emme devi includere il punto di partenza.
Probabile (e fai un test) che quel codice sia equivalente a
codice:
Math.random()* ((int) 'm' -(int) 'g'));