+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 4 su 4

Discussione: istruzione if anomala

  1. #1
    picavbg non è in linea Novello
    Luogo
    Valderice(TP)
    Post
    10

    istruzione if anomala

    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:
    codice:
    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'è?

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,954
    Blogs
    5
    Le stringhe in Java si confrontano in quel modo? Sicuro? Ti dice niente il metodo equals ?
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    picavbg non è in linea Novello
    Luogo
    Valderice(TP)
    Post
    10
    Quote Originariamente inviato da AntonioG Visualizza il messaggio
    Le stringhe in Java si confrontano in quel modo? Sicuro? Ti dice niente il metodo equals ?
    Le stringhe ... le stringhe ... le stringhe

    Ooooh, ecco :
    codice:
    if (crtStri.equals(elenVoc[sw]))
    Ora funziona. Ma, che fatica. Non ricordavo l'eccezione.
    Grazie!

  4. #4
    picavbg non è in linea Novello
    Luogo
    Valderice(TP)
    Post
    10
    Bene. Dubbio Risolto
    Ultima modifica di AntonioG; 22-10-2018 22:33 

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi