Contare Spazi dopo vocale in Java

di biagio-23 il
12 risposte

Ciao Ragazzi , sto svolgendo questo esercizio in Java, vi lascio il testo:

Scrivere un programma Java chiamato Spazi che chiede all’utente di inserire una stringa e stampa il numero di spazi che sono seguiti da una vocale. Per esempio, se si immette “Ciao, imparo a programmare in Java!” il programma deve stampa 3.

A primo impatto mi sembrava semplice , ma non riesco a capire perché , ma il contatore degli spazi mi da come risultato 0.

Ecco il mio codice:

package Tutorato2;
import fond.io.InputWindow;
import fond.io.OutputWindow;
public class spazi {
    public static void main(String[] args){
        InputWindow input = new InputWindow();
        OutputWindow out = new OutputWindow();
        String frase = input.readString("Inserisci la frase");
        int count=0;
        for(int i=0;i<frase.length();i++){
            if((frase.charAt(i)=='a' || frase.charAt(i)=='e' || frase.charAt(i)=='i' || frase.charAt(i)=='o' || frase.charAt(i)=='u') && frase.charAt(i)+1==' '){
                count++;
 
            }
        }
        out.write("Spazi dopo alle vocali:"+count);
    }
   
}

Credo che il problema sia nell'individuare gli spazi , ma non riesco a trovare una soluzione! Qualcuno sa come fare ?

12 Risposte

  • Controlla dove hai messo il +1

  • Ciao , grazie della risposta ,ma non è questo ,   già inizialmente avevo messo il +1 dentro le parentesi , ma se lo metto dentro le parentesi non mi stampa proprio niente, neanche che il contatore è uguale a 0, mi rimane il pannello di output bianco , come se nel codice ci fosse un'errore nella compilazione ma che non viene segnalato. Il problema penso sia proprio sul conteggio di questi spazi bianchi , ma non riesco a capire quale di preciso.

  • Beh, potresti anche fidarti delle risposte che ti vengono date.

    Rifletti sul perché il +1 deve stare dentro le parentesi e rifletti anche sul fatto che il ciclo for deve terminare un carattere prima ovvero 

    i<frase.length()-1;

  • Mi fido , non ho detto nulla , solo che avevo già provato il +1 nelle parentesi ma non funzionava ;)

    Comunque si , con il -1 funziona , potresti spiegarmi il perchè ? Grazie Mille comunque!!!

  • Anzi credo di aver capito , visto che comunque la prima posizione parte da 0 e non da 1 , no?

  • No, prova a vedere che valori assume i ad esempio per una stringa di 5 caratteri

  • Ad ogni modo, la consegna dice di contare il numero di spazi che sono SEGUITI da una vocale, non che sono PRECEDUTI da una vocale… ergo, lo spazio deve stare PRIMA della vocale, non dopo (che nell'esempio le due specifiche portino allo stesso risultato è solo un caso).

  • Corretto, neanche avevo letto ma cambia poco

  • Comunque funziona , grazie a entrambi dell'aiuto,  potreste spiegarmi il motivo di quel -1?

  • Non funziona come dice l'esercizio se non modifichi il codice

  • No intendo solo il -1 all'interno del for il resto lo ho capito 

  • Biagio,se non sbaglio il motivo del -1 è che hai un charAt(i+1): se la stringa è lunga 15 caratteri, l'indice va da 0 a 14, ma quando hai i=14 ottieni  i+1=15, quindi charAt(15) che dà errore

Devi accedere o registrarti per scrivere nel forum
12 risposte