Ciao,
stò vedendo degli esercizzi stile compito d'esame (che è vicinissimo per cui vi prego di darmi una mano).
Sono un po' in crisi con questo esercizio:

Scrivere una classe Java chiamata Involucro che rappresenta collezioni di stringhe del tipo <s1, s2, s3,....,sn> tali che s1 è interamente contenuta in s2, s2 è interamente contenuta in s3, e così via.

Quindi penso io collezioni di stringhe tipo questa:

{'a', 'ab', 'abc'} ma anche di questo tipo {'z', 'az', 'azr', 'xazr'} perchè basta che l'i-esima stringa sia contenuta nella (i+1)-esima stringa della collezione

Le operazioni richieste sono:
a) Inserimento di una stringa in un oggetto di tipo involucro con modifica di tale oggetto.

b) Fusione di due oggetti <s1,s2,s3,...,sn> e <t1,t2,t3,...,tn> di tipo Involucro per formare un nuovo oggetto <s1,s2,s3,...,sn,t1,t2,t3,...,tn> Si osservi che questa operazione non è sempre possibile.

c) Accesso in lettura alla collezione


Bene...io l'ho risolto così...però mi dà vari errori in fase di compilazione che non riesco a risolvere.
(Il codice sembra lungo ma non lo è perchè è pieno di documentazione...la vuole la proff sull'esame e mi stò abituando a farla anche a casa...magari potete saltarla)

codice:
public class Involucro{
	/** OVERVIEW: Involucro rappresenta una collezione dinamica di stringhe del tipo <s1, s2, s3,...., sn> tali che 
				  s_i è completamente contenuta in s_(i+1).
				  
				  V = {{s1,s2,s3,...,sn>: Per ogni i s_i è una stringa ed s_i è interamente contenuto in s_(i+1)}}
				  
				  O = inserisci: Se l'oggetto che si vuole inserire è coerente con la rappresentazione della collezione
				                 (è una stringa) e con lo stato attuale della collezione (i valori già presenti nella
				                 collezione), allora lo inserisce nella collezione modificandola
				      
				      fondi: Date collezioni S e T se s_n è interamente contenuto in t_1 allora fonde le due collezioni nel
				             seguente modo: S = <s1,s2,s3,...,sn> T = {t1,t2,t3,...,tn} --> {s1,s2,s3,...,sn,t1,t2,t3,..,tn}
				      
				      get(i): Accede in maniera posizionale all'i-esimo elemento della collezione */
				     
	private Vector collStr;			// Rappresenta la collezione di stringhe
	
	
	/** FUNZIONE DI ASTRAZIONE: F_a(): STATO CONCRETO ----> STATO ASTRATTO
								F_a([a, ab, abc, abcd]) ------> {<a, ab, abc, abcd>}
								ma anche: F_a([a, b(a), (ba)f, z(baf), (zbaf)e]) ---> {a, ba, baf, zbaf, zbafe}
								
		INVARIANTE DI RAPPRESENTAZIONE: è un predicato I: C ---> boolean che è vero per gli stati concreti che sono
										rappresentazioni leggittime di uno stato astratto:
										
										I(collStr): collStr != NULL (il Vector deve essere sempre diverso da NULL)
										Per ogni i: v.get(i) deve essere incluso in v.get(i+1) (la i-esima stringa deve
										sempre essere interamente contenuta nella (i+1)-esima stringa della collezione */
										
	/** COSTRUTTORE:
		EFFECTS: Crea un nuovo oggetto di tipo Involucro che rappresenta la collezione vuota
		@param: void:
		@return: Il riferimento ad un oggetto di tipo Involucro
		Il costruttore soddisfa l'invariante di rappresentazione in quanto: 1) Viene assegnata alla variabile di istanza
		collStr il riferimento ad un nuovo Vector quindi no è mai null. 2) Il costruttore crea una collezione vuota che
		rappresenta la stringa vuota contenuta in ogni stringa, quindi qualsiasi sia il primo elemento va bene */
		
	public Involucro(){
		collStr = new Vector();		// Crea la collezione vuota assegnando a collStr il riferimento ad un nuovo Vector vuoto
	}
	
	/** Metodo inserisci()
		EFFECTS: Se il parametro può essere inserito nella collezione (se contiene completamente l'ultima stringa della
				 collezione, allora viene inserito nella collezione rappresentata dall'oggetto ricevente, altrimenti viene
				 sollevata una StringaNonValidaException
		MODIFIES: this
		@param: Un oggetto di tipo String 
		Il metodo inserisci() soddisfa l'invariante di rappresentazione in quanto se la collezione è vuota permette
		l'inserimento di una stringa qualsiasi, se invece nella collezione è già presente qualcosa prima di inserire il
		parametro controlla che il parametro contiene completamente l'ultima stringa presente nella collezione. Se ciò è
		verificato la inserisce, altrimenti no e la collezione rimane sempre coerente con la sua definizione */
				 
	public void inserisci(String s){
		
		int n = this.collStr.size(); 	// Mette in n il numero di elementi presenti nella collezione ricevente
		
		if(collStr.size() == 0)			// Se la collezione è vuota
			collStr.addElement(s);		// allora aggiungi l'elemento in prima posizione
		else{							// Se invece la collezione non è vuota
			if(s.contains(this.collStr[n]))	// Se la stringa parametro s contiene l'ultima stringa della collezione
				collStr.addElement(s);	// allora agiunge l'elemento nella collezione
			else throw new StringaNonValidaException();	// Altrimenti non lo inserisce e solleva un'eccezione
		}
	}
	
	/** Metodo fondi():
		EFFECTS: Se possibile fonde la collezione ricevente con quella referenziata dal parametro. Tale fusione è possibile
				 se e solo se l'ultimo elemento della collezione ricevente è totalmente contenuto nel primo elemento della
				 collezione referenziata dal parametro, altrimenti solleva una CollezioneParametroNonValidaExcepion
				 Eventualmente la dusione fosse possiebileil metodo crea una nuova collezione che contiene la fusione delle
				 due collezioni iniziali.
		@param: Il riferimento ad un oggetto Involucro
		@return: Il riferimento ad un nuovo oggetto Involucro
		Il metodo rispetta l'invariante di rappresentazione in quanto ne l'oggetto ricevente, ne il parametro possono essere
		null e poichè l'eventuale nuova collezione rispetta la proprietà che Per ogni i, l'i-esima stringa è sempre
		contenuta nella (i+1)-esima stringa */
		
	public Involucro fondi(Involucro i){
		
		int n = this.collStr.size(); // Mette in n il numero di elementi presenti nella collezione ricevente
		int m = i.collStr.size();	// Mette in m il numero di elementi presenti nella collezione parametro
		private Vector vettoreFusione;		// Conterrà l'eventuale fusione delle 2 collezioni
		int contatore;
		
		/* Se la prima stringa contenuta nella collezione referenziata dal parametro contiene completamente l'ultima stringa
		   contenuta nella collezione ricevente */
		if(i.collStr[1].contains(this.collStr[n])){
			vettoreFusione = new Vector();				// Crea il vettore che conterrà la fusione delle due collezioni
			
			for(contatore=0; contatore<=n; contatore++) 	// Copia gli elementi della prima collezione in vettoreFusione
				vettoreFusione.addElement(this.collStr[contatore]);
				
			for(contatore=0; contatore<=m; contatore++)		// Copia gli elementi della seconda collezione in vettoreFusione
				vettoreFusione.addElement(i.collStr[contatore]);
		}
		
		// Se invece non è possibile eseguire la concatenazione	solleva un'eccezione
		else throw new CollezioneParametroNonValidaExcepion();
		
		return vettoreFusione;		// Ritorna al chiamante il vettore che contiene la fusione delle due collezioni
	}
	
	/** Metodo get(i):
		EFFETS: Accede in lettura in maniera posizionale agli elementi della collezione
		REQUIRES: La collezione non deve essere vuota
		@param: Un valore intero che rappresenta la posizione a cui voglio accedere nella collezione
		@return Un valore String che rappresenta la stringa a cui voglio accede
		Non modificando la collezione rispetta l'invariante di rappresentazione */
		
	public String get(int i){
		if(i >= collStr.size())		// Se si tenta di accedere ad una locazione più grande della dimensione della collezione
			throw FuoriDallaCollezioneException();		// Lancia un'eccezione
		
		else return collStr.elementAt(i);		// Altrimenti restituisci la stringa in posizione i
	}
}
Gli errori che mi da il compilatore sono questi:

C:\Programmi\Crimson Editor\template\esercizi\esami\11-07-07>javac Involucro.java
Involucro.java:82: illegal start of expression
private Vector vettoreFusione; // Conterrà l'eventuale fusione delle 2 collezioni
^
Involucro.java:87: illegal start of type
if(i.collStr[1].contains(this.collStr[n])){
^
Involucro.java:87: ']' expected
if(i.collStr[1].contains(this.collStr[n])){
^
Involucro.java:87: invalid method declaration; return type required
if(i.collStr[1].contains(this.collStr[n])){
^
Involucro.java:87: illegal start of type
if(i.collStr[1].contains(this.collStr[n])){
^
Involucro.java illegal start of type
else throw new CollezioneParametroNonValidaExcepion();
^
Involucro.java invalid method declaration; return type required
else throw new CollezioneParametroNonValidaExcepion();
^
Involucro.java:100: illegal start of type
return vettoreFusione; // Ritorna al chiamante il vettore che contiene la fusione delle due colle
zioni
^
Involucro.java:100: <identifier> expected
return vettoreFusione; // Ritorna al chiamante il vettore che contiene la fusione delle due colle
zioni
^
Involucro.java:110: class, interface, or enum expected
public String get(int i){
^
Involucro.java:114: class, interface, or enum expected
else return collStr.elementAt(i); // Altrimenti restituisci la stringa in posizione i
^
Involucro.java:115: class, interface, or enum expected
}
^
12 errors

Cosa c'èdi sbagliato?

Tnx