Da ieri mi arrovello il cervello per capire perchè nel programmino di esercitazione sugli array mi sono imbattuto in un risultato anomalo durante l'esecuzione di una if all'interno di un ciclo do di scansione degli elementi di un array. Riporto il codice a cui mi riferisco:
private static void calcRpt(String frase) {
// calcola il n° di ricorrenze delle vocali presenti in frase
int k;
int sw;
int lunStri = frase.length() -1;
int [] ricorrenze; // dichiarazione della tabella ricorrenze (a 1 dimensione)
String crtStri;
String [] elenVoc = {"a", "e", "i", "o", "u"};
//-------------------------------------------------------
ricorrenze = new int [5]; // creazione della tabella ricorrenze
for (k = 0 ; k <= (lunStri) ; k++) {
crtStri = frase.substring (k, k+1);
System.out.println();
System.out.println("k= " + k + " - crstri= |" + crtStri + "|");
sw = 0;
do {
System.out.println("elenVoc[" + sw + "]= |" + elenVoc[sw] + "|");
if (crtStri == elenVoc[sw]) { // la condizione non si verifica mai - perchè?
ricorrenze[sw]++;
System.out.println("vocale corrente= |" + crtStri + "| ricorrenza n." + ricorrenze[sw] );
break;
}
sw++;
} while (sw < 5);
}
ed ecco l'output prodotto dalle righe di controllo sui passi di programma interessati:
$ java vocali
******* Ricorrenze di vocali nel testo *******
------- Scrivi una frase -------
bietola
k= 0 - crstri= |b|
elenVoc[0]= |a|
elenVoc[1]= |e|
elenVoc[2]= |i|
elenVoc[3]= |o|
elenVoc[4]= |u|
k= 1 - crstri= |i|
elenVoc[0]= |a|
elenVoc[1]= |e|
elenVoc[2]= |i|
elenVoc[3]= |o|
elenVoc[4]= |u|
k= 2 - crstri= |e|
elenVoc[0]= |a|
elenVoc[1]= |e|
elenVoc[2]= |i|
elenVoc[3]= |o|
elenVoc[4]= |u|
k= 3 - crstri= |t|
elenVoc[0]= |a|
elenVoc[1]= |e|
elenVoc[2]= |i|
elenVoc[3]= |o|
elenVoc[4]= |u|
k= 4 - crstri= |o|
elenVoc[0]= |a|
elenVoc[1]= |e|
elenVoc[2]= |i|
elenVoc[3]= |o|
elenVoc[4]= |u|
k= 5 - crstri= |l|
elenVoc[0]= |a|
elenVoc[1]= |e|
elenVoc[2]= |i|
elenVoc[3]= |o|
elenVoc[4]= |u|
k= 6 - crstri= |a|
elenVoc[0]= |a|
elenVoc[1]= |e|
elenVoc[2]= |i|
elenVoc[3]= |o|
elenVoc[4]= |u|
*** Elenco vocali e delle loro ricorrene ***
vocale n° ricorrenze
a 0
e 0
i 0
o 0
u 0
Come si può notare la stampa indicata nella riga di controllo
System.out.println("vocale corrente= |" + crtStri + "| ricorrenza n." + ricorrenze[sw] );
non è mai avvenuta, nonostante che la frase immessa contenga 4 vocali, tutte presenti nell'array di vocali e nonostante che la if venga ripetuta per tutti gli elementi dell'array. Apparentemente l'esito del condizione risulterebbe semre "false".
Ci deve essere un errore sintattico che non riesco a vedere, ... ma dov'è?