Esercizio su stringhe/array di stringhe

di il
2 risposte

Esercizio su stringhe/array di stringhe

Leggere da tastiera delle stringhe fino a che viene inserita una stringa di lunghezza maggiore di 10 (da non considerare). Quindi stampare tutte le stringhe che contengono un numero di vocali maggiore della media. Ad esempio, se leggo le stringhe:

CIAO Marti
!?!
a Successivamente

La media e` (5+0+1)/3 = 2, quindi va stampata solo la stringa: Ciao Marti

perche´ contiene 5 > 2 vocali.

Questo è il mio script, mi manca solo come stampare le stringhe con somma maggiore della media, pensavo di crearmi un array di interi in cui salvare le somme che ho chiamato sum[count] e poi associarlo all' indice della stringa che voglio stampare ma forse mi sto perdendo in un bicchier d'acqua… Ho inserito dei system out giusto per avere un fac simile di debug nel cmd.. 

import java.util.*;

public class Es1 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        String s = new String();
        int count = 0;

        ArrayList<String> stringa = new ArrayList<>();
        do {
            System.out.println("scrivi una parola: ");
            s = scan.nextLine();
            if (s.length() < 10) {
                stringa.add(s);
                count++;
            }
        } while (s.length() < 10);

        System.out.println("Stringa: " + stringa);

        String[] strvocali = new String[count];

        for (int i = 0; i < count; i++) {
            strvocali[i] = stringa.get(i);
            strvocali[i] = strvocali[i].toLowerCase();
            System.out.println("Array di stringhe: " + strvocali[i]);
        }

        int temp = 0;
        int somma = 0;
        double media = 0;

        int[] sum = new int[count];

        for (int i = 0; i < count; i++) {
            somma = 0;

            for (int j = 0; j < strvocali[i].length(); j++) {
                temp = 0;
                if ((strvocali[i].charAt(j) == 'a') ||
                        (strvocali[i].charAt(j) == 'e') ||
                        (strvocali[i].charAt(j) == 'i') ||
                        (strvocali[i].charAt(j) == 'o') ||
                        (strvocali[i].charAt(j) == 'u')) {
                    temp++;
                }

                somma += temp;
                System.out.println("somma: " + somma);
            }
            sum[i] = somma;
            System.out.println("sum[i]: " + sum[i]);
        }
        media = somma / count;

        System.out.println("media: " + media);

    }

}

2 Risposte

  • Re: Esercizio su stringhe/array di stringhe

    La somma di tutte le vocali di tutte le stringhe la puoi fare direttamente nel primo ciclo, quindi la media ce l'hai subito appena esci. Le somme parziali di vocali per stringa le puoi memorizzare in un'altra ArrayList<Integer>

    Per le vocali, un if con 10 condizioni fatto subito all'inizio è più semplice e più rapido

  • Re: Esercizio su stringhe/array di stringhe

    14/01/2023 - Weierstrass ha scritto:


    La somma di tutte le vocali di tutte le stringhe la puoi fare direttamente nel primo ciclo, quindi la media ce l'hai subito appena esci. Le somme parziali di vocali per stringa le puoi memorizzare in un'altra ArrayList<Integer>

    Per le vocali, un if con 10 condizioni fatto subito all'inizio è più semplice e più rapido

    15/01/2023 - Bovy98 ha scritto:


    Sistemato grazie!!

    import java.util.*;
    
    public class Es1 {
        public static void main(String[] args) {
    
            Scanner scan = new Scanner(System.in);
            String s = new String();
            int count = 0;
            ArrayList<Integer> vocali = new ArrayList<>();
    
            ArrayList<String> stringa = new ArrayList<>();
    
            int somma = 0;
            int conteggio = 0;
    
            double media = 0;
    
            do {
                System.out.println("scrivi una parola: ");
                s = scan.nextLine();
    
                if (s.length() < 10) {
                    stringa.add(s);
    
                    count = 0;
                    for (int i = 0; i < s.length(); i++) {
    
                        if ((s.charAt(i) == 'a') ||
                                (s.charAt(i) == 'e') ||
                                (s.charAt(i) == 'i') ||
                                (s.charAt(i) == 'o') ||
                                (s.charAt(i) == 'u')) {
                            count++;
    
                        }
                    }
                    vocali.add(count);
                    somma += count;
                    conteggio += 1;
    
                    System.out.println("count: " + count);
                    System.out.println("vocali: " + vocali);
    
                }
            } while (s.length() < 10);
    
            System.out.println("Stringa: " + stringa);
    
            media = somma / conteggio;
    
            System.out.println("media: " + media);
    
            ArrayList<String> listaFinale = new ArrayList<>();
    
            for (int i = 0; i < vocali.size(); i++) {
    
                if (vocali.get(i) > media) {
                    stringa.get(i);
                    listaFinale.add(stringa.get(i));
                }
    
            }
    
            System.out.println("listaFinale: " + listaFinale);
    
        }
    }
Devi accedere o registrarti per scrivere nel forum
2 risposte