sspintux ha scritto:
Anonimamente22 ha scritto:
cioè praticamente mi stai dicendo che è come se sottraessi la posizione di z alla posizione di a?
se ipoteticamente z è 26 e a è 1: 26-1=25?...
si
... se fai un pò di debug lo vedi facilemnte come funziona;
IMOH, può essere istruttivo anche 'eseguire' il codice con carta gomma e matita
Comincio a vedere la luce ma ancora non mi è chiara una cosa.
Provo a dirti passo per passo cosa ho capito correggimi se sbaglio cortesemente:
1) int[] count = new int['z' - 'a' + 1]; assegno l'indice al mio vettore pari al numero di lettere dell'alfabeto: cioè 26 (avrei anche potuto scrivere direttamente 26 giusto?)
2)
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
count[c - 'a']++;
}
Qui si ha un ciclo iterato per tutta la lunghezza della parola, dove verrà assegnata a una variabile char ogni lettera della parola stessa.
Mentre nel count[c-'a']++; verrà sottratta la posizione della lettera nella variabile char dalla prima lettera dell'alfabeto.
Quindi se io avessi per esempio
char c= 'c'; (cioè la lettera c dell'alfabeto).
La posizione di c sarebbe 3 numericamente, quindi il calcolo fatto è: 3-1=2. E poi all'interno dell'array nella posizione 2 vi sarà un incremento di 1 corrispondente allla lettera dell'alfabeto.
3)
for (int i = 0; i < count.length; i++) {
if (count[i] > 0) {
System.out.println((char)('a' + i) + ": " + count[i]);
}
}
Avremo un ciclo che si itererà per la dimensione dell'array count. E quindi fino a 26.(avrei potuto scrivere i<26 direttamente giusto?-
All'interno di questo ciclo avremo un if che si occuperà di far stampare solo le lettere che effettivamente sono comprese nella parola.
Per quanto riguarda il println: System.out.println((char)('a' + i) + ": " + count
);
Non capisco il perchè scrivere (char) prima di ('a'+i). Non avremmo funzionato in egual modo anche senza?