Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Funzione occorrenza parole

    Ciao a tutti, sto per diventare pazzo, sto scrivendo un progetto in java per contare l'occorrenza delle parole in un testo. Per salvare le parole utilizzo questa funzione :
    codice:
    public ArrayList<Word> getArrayTop(){
    		int i=0,n=0;
    		String temp="";
    		Word wtemp=new Word();
    		while(i<words.length-1){
    			if((words[i].equals(words[i+1]))&&(words[i].length()>3)){
    				temp=words[i];
    				for(i=i+0;words[i].equals(temp);i++)
    					n++;
    				System.out.println(n);
    				wtemp.occ=n;
    				System.out.println(temp);
    				wtemp.ww=temp;
    				System.out.println(wtemp);
    				w.add(wtemp);
    				n=0;
    			}
    			
    			i++;
    		}
    		for(int j=0;j<w.size();j++)
    			System.out.println(w.get(j));
    		
    		return w;
    	}
    finchè l'array viene stampato "all'interno" del ciclo while non ci sono problemi e le parole vengono conteggiate correttamente, quando però provo a stampare le parole salvate, in teoria, nell'array mi risulta solo l'ultima immessa.
    Dimenticavo l'array di stringhe che utilizzo è ordinato..!

    Consigli? grazie ciao!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Ho spostato la discussione nell'area dedicata a Java: è già l'ennesima discussione che viene spostata (vedi qui e qui), quindi fai attenzione a scegliere nel modo corretto l'area in cui aprire la discussione quando ne avvii una nuova in futuro.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Posta il codice di tutta la classe.

  4. #4
    pardon, evidentemente ero fuso.. :P

    CLASSE:
    codice:
            import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.StringTokenizer;
    
    public class Utilize{
    	
    	private ArrayList<Word> w=new ArrayList<Word>(2);
    	
    	private String words[];
    	public Utilize(String s){
    		StringTokenizer st = new StringTokenizer(s,":.,;></-+*|! %&?^()[]");
    		int size=st.countTokens();
    		words=new String[size];
    		for(int i=0;i<size;i++){
    			words[i]=st.nextToken();
    		}
    		Arrays.sort(words);
    		getArrayTop();
    		}
    
    public ArrayList<Word> getArrayTop(){
    		int i=0,n=0;
    		String temp="";
    		Word wtemp=new Word();
    		while(i<words.length-1){
    			if((words[i].equals(words[i+1]))&&(words[i].length()>3)){
    				temp=words[i];
    				for(i=i+0;words[i].equals(temp);i++)
    					n++;
    				System.out.println(n);
    				wtemp.occ=n;
    				System.out.println(temp);
    				wtemp.ww=temp;
    				System.out.println(wtemp);
    				w.add(wtemp);
    				n=0;
    			}
    			
    			i++;
    		}
    		for(int j=0;j<w.size();j++)
    			System.out.println(w.get(j));
    		
    		return w;
    	}
    }
    
    questa è l'intera classe buttate un'okkio però alla funzione che è la parte che mi da problemi...!

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Se tu trovi due parole uguali allora setti il valore di temp:

    codice:
    if((words[i].equals(words[i+1]))&&(words[i].length()>3)){
    				temp=words[i];
    Però il problema è questo ciclo:

    codice:
    for(i=i+0;words[i].equals(temp);i++)
        n++;
    Così incrementi i finchè non trovi due parole diverse, non capisco il perchè di questo.

  6. #6
    Mmmm no bhe quello mi sembra giusto, Ti spiego l'algoritmo... L'array di parole è ordinato, trovo 2 parole consecutive uguali, e ciclo ( ciclo for da te indicato) fino a che non trovo una parola diversa da quella salvata in temp cosí piú le parole sono ripetute piú n viene incrementato. Se provi ad eseguirlo e metti un controllo di stampa su temp e su w all'internon del while la funzione funziona corretamente... Ma se poi alla fine del ciclo provo a stampare gli elementi mi stampa in tutti i campi solo l'ultimo salvato... Spero di essermi fatto capire...!!! :-P

    BUON NATALE E GRAZIE DI TUTTO...!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Devi per forza usare le strutture dati di cui fai uso nel tuo metodo? Chiedo perché utilizzando una mappa con chiave la parola e valore l'occorrenza credo che te ne usciresti con 4 o 5 righe di codice. Tra l'altro è un argomento già trattato per cui trovi almeno un thread sul forum con qualche brano di codice a supporto. Buone feste!
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    nono non necessariamente, io facevo così per aver "legato" parola con occorrenza in modo tale che se io, per esempio, ordino tutto in base all'occorrenza, la parola sia comunqu in corrispondenza della propria occorrenza... mi consigli di usare una hashtable?grazie ancora.."

  9. #9
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non capisco cosa è Word.ww e perchè accedi al campo come se fosse pubblico.
    Fai prima a creare una classe generica che contiene una stringa e un valore (inizialmente zero), poi ogni volta che incontri una parola nuova fai un' istanza della classe mettendo il campo numerico a 1, se invece incontri una parola che è già presente nella lista incrementi il campo numerico.
    Ma così utilizzando Word, con i campi .ww e .occ che non so cosa sono mi è impossibile capire cosa stai facendo.

  10. #10
    codice:
    public class Word {
    	public String ww;
    	public int occ;
    	
    	public Word(){
    		ww="";
    		occ=0;
    	}
    	public Word(String ww,int occ){
    		this.ww=ww;
    		this.occ=occ;
    		
    	}
    	public String toString(){
    		return "parola :"+ww+" :"+occ;
    	}
    	
    }
    questa è la mia struttura di word!
    praticamente io creo un array di classi word che poi ordinerò facilmente con sort perchè tanto è composta da "tipi primitivi"...
    il problema delle hashtable è che non sono ordinate... e io voglio che siano ordinate secondo valore(occorrenza) e non secondo Key(parola)...Nel modo più efficente possibile poichè è per un'appliczione android mobile...

    Ovviamente le parti "di calcolo" le faccio come semplici programmi java che poi adatto così da debuggarle più facilmente..!

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.