Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Ricerca delle vocali in una stringa

    Ciao a tutti!
    Vi presento l'esercizio che dovevo fare:

    codice:
    /*
    <<<Descrizione del problema>>>
    Bisogna creare un programma che
    ne legge una stringa in input 
    e ne conti quanti sono le vocali
    nella stringa.
    
    <<<Analisi dei dati>>>
    	input:
    	chiedo, leggo e memorizzo la stringa
    	
    	output:
    	stampo quante vocali ci sono nella stringa
    	
    	variabili:
    		parola(stringa);
    		numeroVocali(int);
    		numeroLettere(int);
                    contatore(int);
    	
    	implementazioni:
    		classe di utilità "Scanner";
    		
    <<<Pseudocodifica>>>
    inizio classe Esercizio1
    
    	dichiaro le variabili;
    		contatore(int) = -1;
    		numeroLettere(int) = 0;
    		numeroVocali(int) = 0;
    		parola(String) = "";
    		
    	chiedo, leggo e memorizzo la parola in input
    	parola <- stringa
    	vedo quante lettere ha la stringa e memorizzo il loro numero
    	numeroLettere <- (int) parola
    	
    	ripeto
    	incremento di uno il contatore
    	se la lettera della stringa è una vocale
    	allora
    	incremento di uno numeroVocali
    	
    	finchè numeroLettere >= contatore
     
            stampo il risultato
    
    fine classe Esercizio1
    */
    
    //importo la classe Scanner
    import java.util.Scanner;
    
    class ricercaVocali
    {
    	public static void main (String[]args)
    	{
    		//dichiaro le variabili
    		String parola = "";
    		int numeroVocali = 0;
    		int numeroLettere;
    		int contatore = 0;
    	
    	//chiedo, leggo e memorizzo la sparola in input
    	System.out.print("Inserire la parola:");
    	Scanner sc = new Scanner(System.in);
    	parola = sc.nextLine();
    
    	numeroLettere = parola.length();
    	
    	//inizio il ciclo
    	do
    	{
    	contatore++;
    		if (parola.charAt(contatore)=='a')
    		if (parola.charAt(contatore)=='e')
    		if (parola.charAt(contatore)=='i')
    		if (parola.charAt(contatore)=='o')
    		if (parola.charAt(contatore)=='u')
    		if (parola.charAt(contatore)=='A')
    		if (parola.charAt(contatore)=='E')
    		if (parola.charAt(contatore)=='I')
    		if (parola.charAt(contatore)=='O')
    		if (parola.charAt(contatore)=='U')
    	numeroVocali++;
    	}
    	while (contatore>numeroLettere);
    	
    	System.out.println("Nella parola ci sono presenti "+numeroVocali+" vocali");
    	
    	}
    }
    Il problema è che qualsiasi stringa io metta in input anche di 50 caratteri di lunghezza, in output mi da "0"...

    per esempio:
    prendo in input il la stringa "Massimiliano"
    ed ho in output questo:
    "Nella parola ci sono presenti 0 vocali"

    COME RISOLVERE QUESTO PROBLEMA???
    Grazie a tutti in anticipo!

  2. #2

    Re: Ricerca delle vocali in una stringa

    Originariamente inviato da JanQuarius
    codice:
    import java.util.Scanner;
    
    class ricercaVocali
    {
    	public static void main (String[]args)
    	{
    		//dichiaro le variabili
    		String parola = "";
    		int numeroVocali = 0;
    		int numeroLettere;
    		int contatore = 0;
    	
    	//chiedo, leggo e memorizzo la sparola in input
    	System.out.print("Inserire la parola:");
    	Scanner sc = new Scanner(System.in);
    	parola = sc.nextLine();
    
    	numeroLettere = parola.length();
    	
    	//inizio il ciclo
    	do
    	{
    	contatore++;
    		if (parola.charAt(contatore)=='a')
    		if (parola.charAt(contatore)=='e')
    		if (parola.charAt(contatore)=='i')
    		if (parola.charAt(contatore)=='o')
    		if (parola.charAt(contatore)=='u')
    		if (parola.charAt(contatore)=='A')
    		if (parola.charAt(contatore)=='E')
    		if (parola.charAt(contatore)=='I')
    		if (parola.charAt(contatore)=='O')
    		if (parola.charAt(contatore)=='U')
    	numeroVocali++;
    	}
    	while (contatore>numeroLettere);
    	
    	System.out.println("Nella parola ci sono presenti "+numeroVocali+" vocali");
    	
    	}
    }
    Intanto la condizione del ciclo è sbagliata. Poi ti basta un solo if nel quale devi collegare le varie condizioni mediante l'operatore logico OR, che in java si indica col simbolo ||.

  3. #3

    Re: Ricerca delle vocali in una stringa

    Sono sbagliate molte cose in questo esercizio;

    Intanto quegli if così messi non vanno bene.
    codice:
    		if (parola.charAt(contatore)=='a')
    		if (parola.charAt(contatore)=='e')
    		if (parola.charAt(contatore)=='i')
    		if (parola.charAt(contatore)=='o')
    		if (parola.charAt(contatore)=='u')
    		if (parola.charAt(contatore)=='A')
    		if (parola.charAt(contatore)=='E')
    		if (parola.charAt(contatore)=='I')
    		if (parola.charAt(contatore)=='O')
    		if (parola.charAt(contatore)=='U')
    	numeroVocali++;
    Così il compilatore intende: se la lettera in posizione contatore è 'a' allora se la lettera in posizione contatore è 'e' allora se la lettera in posizione ecc...
    Devi concatenare tutte le condizioni con l'operatore || (or), che verifica se una condizione è vera o una condizione è vera o una condizione è vera ecc...

    Poi il while:
    codice:
    	//inizio il ciclo
    	do
    	{
    	contatore++;
            ....
    	}
    	while (contatore>numeroLettere);
    Intanto incrementi contatore all'inizio del ciclo, quindi siccome charAt vuole un indice che parta da 0, o all'inizio setti contatore a -1 invece di 0, oppure usi while invece del do-while.
    Poi la condizione di ciclo è sbagliata. Tu cicli fin quando contatore è maggiore di numero lettere (cosa impossibile), quindi fa il controllo della 2^ lettera (perchè contatore diventa 1) ed esce subito dal ciclo.
    lolide
    Java Programmer

    Informati

  4. #4
    in più mettendo gli if in quel modo l'operazione viene eseguita solo se la prima lettera è una 'a'
    infatti se non lo è, gli altri if non vengono nemmeno visionati

    come lo hai scritto tu, va letto
    se la lettera in esame è una 'a' allora
    controlla se la lettera in esame è anche una 'e' allora
    eccetera

    noterai che non ha nemmeno un lontano senso logico

    edit: preceduto :P

  5. #5
    Ok...ho corretto!

    codice:
    import java.util.Scanner;
    
    class ricercaVocali
    {
    	public static void main (String[]args)
    	{
    		//dichiaro le variabili
    		String parola = "";
    		int numeroVocali = 0;
    		int numeroLettere;
    		int contatore = -1;
    	
    	//chiedo, leggo e memorizzo la sparola in input
    	System.out.print("Inserire la parola:");
    	Scanner sc = new Scanner(System.in);
    	parola = sc.nextLine();
    
    	numeroLettere = parola.length();
    	
    	//inizio il ciclo
    	do
    	{
    	contatore++;
    		if ((parola.charAt(contatore)=='a')||(parola.charAt(contatore)=='e')||(parola.charAt(contatore)=='i')||(parola.charAt(contatore)=='o')||(parola.charAt(contatore)=='u')||(parola.charAt(contatore)=='A')||(parola.charAt(contatore)=='E')||(parola.charAt(contatore)=='I')||(parola.charAt(contatore)=='O')||(parola.charAt(contatore)=='U'));
    	numeroVocali++;
    	}
    	while (contatore<numeroLettere);
    	
    	System.out.println("Nella parola ci sono presenti "+numeroVocali+" vocali");
    	
    	}
    }
    Solo che adesso mi da un'altro errore:

    ...
    Inserire la parola:Giardino

    Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
    String index out of range: 8
    at java.lang.String.charAt(String.java:686)
    at ricercaVocali.main(ricercaVocali.java:76)
    ...

  6. #6
    Originariamente inviato da JanQuarius
    ...
    Inserire la parola:Giardino

    Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
    String index out of range: 8
    at java.lang.String.charAt(String.java:686)
    at ricercaVocali.main(ricercaVocali.java:76)
    ...
    Inizializza contatore a 0, ed incrementalo dopo l'istruzione di incremento di numeroVocali.

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Attento, alla fine dell'if non ci va il ; (punto e virgola)!

    Poi curiosità, perché hai un do-while e lo usi come se fosse un for?

    Il while/do-while si usa quando non è noto a priori quanto iterare. Al contrario, se conosci il numero esatto di iterazioni il costrutto più adatto è il for.

    codice:
    for (int contatore = 0; contatore < numeroLettere; contatore++) {
      if ((parola.charAt(contatore) == 'a') || (parola.charAt(contatore) == 'e') ||
          (parola.charAt(contatore) == 'i') || (parola.charAt(contatore) == 'o') ||
          (parola.charAt(contatore) == 'u') || (parola.charAt(contatore) == 'A') ||
          (parola.charAt(contatore) == 'E') || (parola.charAt(contatore) == 'I') ||
          (parola.charAt(contatore) == 'O') || (parola.charAt(contatore) == 'U')) {
        numeroVocali++;
      }
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Originariamente inviato da Alex'87
    Poi curiosità, perché hai un do-while e lo usi come se fosse un for?
    Perchè nella specifica sopra gli hanno detto di usare un do-while.

  9. #9
    Allora, ho coretto tutto quanto:

    codice:
    /*
    <<<Descrizione del problema>>>
    Bisogna creare un programma che
    ne legge una stringa in input 
    e ne conti quanti sono le vocali
    nella stringa.
    
    <<<Analisi dei dati>>>
    	input:
    	chiedo, leggo e memorizzo la stringa
    	
    	output:
    	stampo quante vocali ci sono nella stringa
    	
    	variabili:
    		parola(stringa);
    		numeroVocali(int);
    		numeroLettere(int);
    		contatore(int);
    	
    	implementazioni:
    		classe "Scanner";
    		
    <<<Pseudocodifica>>>
    inizio classe Esercizio1
    
    	dichiaro e inizializzo le variabili;
    		contatore(int) = 0;
    		numeroLettere(int) = 0;
    		numeroVocali(int);
    		parola(String) = "";
    		
    	chiedo, leggo e memorizzo la parola in input
    	parola <- stringa
    	vedo quante lettere ha la stringa e memorizzo il loro numero
    	numeroLettere <- (int) parola
    	
    	ripeto
    	
    	se la lettera della stringa è una vocale
    	allora
    	incremento di uno numeroVocali
    	e
    	incremento di uno il contatore
    	
    	finchè numeroLettere < contatore
    	
    	stampo il risultato
    
    fine classe Esercizio1
    */
    
    
    import java.util.Scanner;
    
    class ricercaVocali
    {
    	public static void main (String[]args)
    	{
    	
    		String parola = "";
    		int numeroVocali = 0;
    		int numeroLettere;
    		int contatore = 0;
    	
    	System.out.print("Inserire la parola:");
    	Scanner sc = new Scanner(System.in);
    	parola = sc.nextLine();
    
    	numeroLettere = parola.length();
    	
    	do
    	{
    		if ((parola.charAt(contatore)=='a')||(parola.charAt(contatore)=='e')||(parola.charAt(contatore)=='i')||(parola.charAt(contatore)=='o')||(parola.charAt(contatore)=='u')||(parola.charAt(contatore)=='A')||(parola.charAt(contatore)=='E')||(parola.charAt(contatore)=='I')||(parola.charAt(contatore)=='O')||(parola.charAt(contatore)=='U'))
    		numeroVocali++;
    		contatore++;
    	}
    	while (contatore<numeroLettere);
    	
    	System.out.println("Nella parola ci sono presenti "+numeroVocali+" vocali");
    	
    	}
    }
    Poi curiosità, perché hai un do-while e lo usi come se fosse un for?

    Il while/do-while si usa quando non è noto a priori quanto iterare. Al contrario, se conosci il numero esatto di iterazioni il costrutto più adatto è il for.
    Non l'ho usato perchè il prof. non me l'ha ancora insegnato...sicuramente hai ragione dal punto di vista logico! Appena lo vedo, lo chiedo perchè non ci insegna di più funzioni...di solito ci fa programmare in maniera strana, mi sembra di aver pochi strumenti a disposizione.
    Tu che ne pensi di questo?

    Grazie a tutti!
    Il programma mi è venuto!

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da VincenzoTheBest
    Perchè nella specifica sopra gli hanno detto di usare un do-while.
    Ops, non l'avevo letta quella parte
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.