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

    Ricorrenze in una stringa

    Ciao a tutti, devo fare un piccolo programma che controlla quante volte vengono ripetute le parole in un testo.
    Ci sto provando da giorni ma mi incarto un casino... potreste darmi una mano?
    Vi posto il codice con l'ennesimo tentativo sbagliato:
    codice:
    import prog.io.ConsoleInputManager; 
    import prog.io.ConsoleOutputManager;
    
    public class RicorrenzeStringa{
    	public static void main(String[] args){
    		ConsoleOutputManager video = new ConsoleOutputManager();
    		ConsoleInputManager tastiera = new ConsoleInputManager();
    		
    		String testo = tastiera.readLine("\nInserisci un testo (solo lettere): ");
    		//sopra la panca la capra canta sotto la panca la capra crepa
    
    		String []dizionario = testo.split(" ");
    		String []ricorrenze = new String[testo.length()];
    		int []volte_ricorrenza = new int[testo.length()];
    		int j = 0, k = 0;
    		
    		for(int i = 0; i < dizionario.length; i++){
    			while(j < ricorrenze.length && ricorrenze[j] != dizionario[i]) j++; // Si ferma quando trova l'indice di un elemento uguale
    			
    			if (j < ricorrenze.length) volte_ricorrenza[j]++; // se è stato trovato un elemento uguale incrementa il numero di volte che viene ripetuto
    			else{ //se no trova uno spazio vuoto dove inserire la nuova parola
    				while(k < ricorrenze.length && ricorrenze[k] != null) k++;
    				ricorrenze[k] = dizionario[i];
    				volte_ricorrenza[k]++; // e aumenta il numero di volte che è ripetuta (essendo di sicuro volte_ricorrenza[k] == null il valore diventerà 1)
    			}
    		}
    		
    		for(int i = 0; i < ricorrenze.length; i++){
    			if (ricorrenze[i] != null) video.println(ricorrenze[i]+": "+volte_ricorrenza[i]);
    		}
    	}
    }
    Questo come già detto non funziona... restituisce tutte le parole con una sola ricorrenza

    Aiuto please ç_ç
    Flash Developer for Rich Media
    PHP, jQuery Developer

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Io userei una bella HashMap<String,Integer> dove appunto la chiave è la stringa (la parola) e il valore è il conteggio delle ricorrenze. Per ogni stringa presente nell'array delle parole, inserirei nella mappa 1 (se la parola non è nella mappa) o il valore esistente incrementato di 1 (se la parola è già nella mappa).
    Il tutto in meno di 10 righe di codice, pulite pulite.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Segui il consiglio di andbin, e per lo split usa una regex tipo
    codice:
    import java.util.regex.Pattern;
    ...
    
    Pattern p = Pattern.compile("\\s+");
    String[] splittato = p.split(tuaStringa);
    ...
    A quel punto ti compili l'Hashtable come ti è stato suggerito ed hai finito.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Ok, ho capito i vostri consigli e vi ringrazio... però purtroppo la clausula del prof è quella di usare gli array e i cicli quindi non credo che un metodo come la HashMap vada bene =\
    Flash Developer for Rich Media
    PHP, jQuery Developer

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ok, allora è un puro esercizio di stile
    codice:
    String line = "Sopra la panca la capra campa sotto la panca la capra crepa";
            String[] dictionary = line.split("\\s");
            int[] freq = new int[dictionary.length];
            for (int i = 0; i < freq.length; i++) {
                freq[i] = 0;
            }
            for (int i = 0; i < dictionary.length; i++) {
                for (int j = 0; j < dictionary.length; j++) {
                    freq[j] += (dictionary[i].equals(dictionary[j]) ? 1 : 0);
                }
            }
            System.out.println(line+"\n\nParole e frequenze");
            for (int i = 0; i < freq.length; i++) {            
                System.out.println(dictionary[i]+ " -> "+freq[i]);
            }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Perfetto... però io giustamente vi ho spiegato da schifo come mi serviva e ve lo devo dire a rate... sorry >_<

    Se volessi stamapare una sola volta le parole ripetute con il rispettivo numero di volte?
    Qui bisognerà registrare in un nuovo array le varie parole una volta trovate e ogni volta controllare se la parola che si sta prendendo in esame esiste già in questo array aggiungendola se non c'è.
    Flash Developer for Rich Media
    PHP, jQuery Developer

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Lo fai tu, percorrendo l'array delle ricorrenze... se > 1 copi altrimenti no
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    aspetta.... non ho afferrato bene il concetto... °_°
    Perké se è maggiore di uno?
    Flash Developer for Rich Media
    PHP, jQuery Developer

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    niente, ti ho detto una frescaccia l'alcohol domenicale. Se è 1 allora sicuramente la parola non c'è, se è maggiore di 1 potrebbe già esserci
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    ecco.... quindi io dovrò registrare da qualche parte un qualcosa che dice "la tal parola è già stata stampata"
    come poter fare....? mmmmmh

    [scusa... è che sono alle prime armi con java.... questo è uno dei primi programmi "complessi"]
    Flash Developer for Rich Media
    PHP, jQuery Developer

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.