Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    50

    [JAVA] esercizio catena di parole

    Salve a tutti, devo fare per l'uni questo progettino...

    -----

    Esercizio: catena di parole

    Scrivere un programma che accetti in input da riga di comando il nome di un file di testo e un valore numerico n.

    Il file di testo deve contenere una lista di parole, una su ogni linea, da usare come dizionario.

    Il programma deve visualizzare in output la più lunga catena di parole ottenibile usando parole del dizionario.

    Una catena di parole è una sequenza di parole in cui ogni parola, esclusa la prima, inizia con le stesse n lettere con cui si conclude la parola precedente. Il valore n corrisponde a quello acquisito da linea di comando.

    Esempio:

    Lanciando il programma con java Esercizio dizionario.txt 2, dove il file dizionario.txt contiene:

    mare
    roma
    casa
    remo

    si potrà ottenere in output:

    roma
    mare
    remo

    -----
    ecco quello che ho fatto:
    codice:
    import java.util.ArrayList;
    public class Esercizio{
    	private int num=2;
    ArrayList<String> parole = new ArrayList<String>();	//Creo l'arrayList parole del dizionario
    ArrayList<String> parole2 = new ArrayList<String>();
    
    
    private void inserisci(){
    parole.add("mare");
    parole.add("roma");
    parole.add("casa");
    parole.add("remo");
    }
    
    	private void stampa(){
    		
    		for (int i=0 ; i< parole2.size() ; i++) {
    			
    			System.out.println(parole2.get(i).toString()); 
    		}
    	}
    	
    
    	
    	private void scandisci(){
    	parole2.add(parole.get(1));
    	int count =0;
    	String fine = finisceCon(parole.get(1).toString(),num);
    	//while(count<parole.size()){
    		
    		for (int i=0 ; i< parole.size() ; i++) {
    		
    			for (int j=0 ; j< parole.size() ; j++) {
    		
    				String inizio = iniziaCon(parole.get(j).toString(),num);
    				if(fine.equals(inizio)){
    					parole2.add(parole.get(j));
    					parole.remove(j);
    				}
    				//else break;
    		}
    		count++;
    		//fine = finisceCon(parole.get(i).toString(),num);
    	//}	
    	}
    	}
    	
    	
    private String finisceCon(String parola, int num){
    	int lettere=parola.length();
    	int start=lettere-num;
    	String nuovaparola=parola.substring(start,lettere);
    	return nuovaparola;
    }
    
    
    private String iniziaCon(String parola, int num){
    
    	String nuovaparola=parola.substring(0,num);
    	return nuovaparola;
    }
    
    
    	public static void main (String[]args){
    	
    	Esercizio Catena = new Esercizio();
    	Catena.inserisci();
    	Catena.scandisci();
    	Catena.stampa();
    
    
    
    }
    }
    la soluzione migliore sarebbe farlo in modo ricorsivo ma a me non viene nemmeno completo iterativo!!!

    Grazie

  2. #2
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    ricorsivo
    codice:
    import java.util.ArrayList;
    import java.util.List;
    
    public class Esercizio{
    	
    	List<String> dizionario = new ArrayList<String>();
    	List<String> paroleTrovate = new ArrayList<String>();
    
    	private void inserisci() {//leggere da file il dizionario e caricarlo nell'arraylist
    		dizionario.add("mare");
    		dizionario.add("mola");
    		dizionario.add("lama");
    		dizionario.add("remo");
    	}
    
    	private void stampa(){
    		for(String parola : paroleTrovate) {
    			System.out.println(parola); 
    		}
    	}
    
    	private void processParola(String parola, int numeroCaratteri) {
    		this.paroleTrovate.add(parola);
    		this.dizionario.remove(parola);
    		String fineParola = parola.substring(parola.length() - numeroCaratteri);
    		for(String vocabolo : this.dizionario) {
    			if(vocabolo.startsWith(fineParola)) {
    				processParola(vocabolo, numeroCaratteri);
    				return;
    			}
    		}
    	}
    
    	public static void main (String[] args) { //sintassi: java Esercizio <parola iniziale> <numero caratteri>
    		Esercizio catena = new Esercizio();
    		catena.inserisci();
    		catena.processParola(args[0], Integer.parseInt(args[1]));
    		catena.stampa();
    	}
    }

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.