import java.util.Scanner; /** * Prende in input una stringa e visualizza, per ogni carattere presente nella * stassa, il numero di volte che appare. * Esempio: * - se l'input è "posto" l'output dovrà essere * p: 1 * o: 2 * s: 1 * t: 1 */ public class P3LetteraFrequenza2 { public static void main(String[] args) { System.out.print("Inserisci stringa: "); var kbd = new Scanner(System.in); var s = kbd.nextLine(); // Questo cifro scandisce una alla volta le posizioni della stringa s. // Per ogni posizione viene estratto il caattere corrisponde, calcolata e // visualizzata la sua frequenza. for (int j = 0; j <= s.length() - 1; j++) { char c = s.charAt(j); // Per evitare di ripetere più volte nell'output la stessa lettera, // il ciclo che segue controlla se la lettera è già stata incontata in // una posizione precedente. Se sì, la variabile trovato viene impostata // a true, altrimenti rimane a false, come impostata inizialmente. boolean trovato = false; for (int i = 0; i < j; i++) if (s.charAt(i) == c) // potremmo anche aggiungere un break per uscire immediatamente (vedi programma // P6Palindromo della lezione del 25/10/2022. trovato = true; // Se trovato è a false, ovvero se è la prima volta che incontroiamo questa // lettera, procede al calcolo e visualizzazione della frequenza. if (!trovato /* trovato == false */) { // Questa parte del programma è identica a quella presente in // P1LetteraFrequenza1. int contatore = 0; for (int i = 0; i <= s.length() - 1; i++) { if (s.charAt(i) == c) contatore += 1; } System.out.println(c + ": " + contatore); } } kbd.close(); } }