Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [java]vocali e array

  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]vocali e array

    Ciao sto svolgendo un esercizio che non riesco a risolvere:
    trova le vocali in una stringa;mi consiglia poi di usare il metdo boolean isVocale(char c), che verifica se c è una vocale e sta proprio qui il dilemma.
    L'esercizio non dice se usare un array semplice o un ArrayList.Io l'ho risolto con un ArrayList e viene tutto.Poi per curiosità ho provato a risolverlo con un array normale ma non riesco a risolverlo:
    codice:
    import java.util.*;
    class Vocale {
    
    public char []vocali={'a','e','i','o','u'};
     //verifico se c è una vocale
    public boolean isVocale(char c){ 
        for(int pos=0;pos<vocali.length;pos++)
        if(vocali[pos]==c)
        return true;
            
    }
    }
    il compilatore mi dà errore perchè non trova il ritorno del metodo.Qualcuno ha ualche suggerimento?Aiutooo mi sto prdendo in un bicchiere d'acqua

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Ed ha ragione.
    Tu ritorni true se e solo se la variabile passata è contenuta nell'array... ma non ritorni mai false nel caso non fosse una vocale. O meglio, nel caso in cui la lettera non sia una vocale non fai nessun return, ed il compilatore ovviamente si arrabbia.
    Per questo tipo di problemi bisognerebbe sempre usare l'approccio single function exit point, ovvero un solo punto in cui la funzione restituisce il risultato. Ed il risultato si ha sempre e solo alla fine:


    codice:
    public boolean isVocale(char c){ 
        // Dichiaro subito la variabile che conterrà il valore di ritorno
        boolean ret = false;
    
        // Eseguo l'elaborazione
        for(int pos=0;pos<vocali.length;pos++) {
           if(vocali[pos]==c) {
              ret = true;
           }
        }
         
        // Alla fine, e solo alla fine, ritorno il valore (e lo ritorno SEMPRE)
        return ret;  
    }

    E' un approccio meno efficiente (per renderlo più efficiente è sufficiente mettere un break nel ciclo for dopo aver assegnato true alla variabile ret), ma più manutenibile e sicuramente più chiaro da capire.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.