Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Con la quattordicesima generazione Lenovo ridisegna il suo ThinkPad più iconico attorno al nuovo Space Frame e ai processori Intel Core Ultra Series 3. Resta sotto 1Kg, è molto più semplice da riparare e si rivolge al professionista che lavora in mobilità, con un prezzo da prodotto di vertice.
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Le Jabra Evolve3 85 non sono semplicemente cuffie Bluetooth con cancellazione del rumore. Sono un dispositivo professionale pensato per chi trascorre gran parte della giornata in riunione, al telefono o davanti a un assistente basato sull'intelligenza artificiale
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-06-2009, 16:54   #1
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
[JAVA] Gestire collezione di stringhe particolari, non funziona !!!

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:98: illegal start of type
else throw new CollezioneParametroNonValidaExcepion();
^
Involucro.java:98: 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
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 02-06-2009, 18:07   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Controlla le parentesi. Qui ad esempio ne manca una:

Codice:
		if(collStr.size() == 0)			// Se la collezione è vuota
			collStr.addElement(s);		// allora aggiungi l'elemento in prima posizione
		else {
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Claude Code: il bug che ha spedito l'ema...
Perplexity lancia Teammates, gli agenti ...
Niente più datacenter? Gli eletto...
La Cina avrebbe approvato lo sviluppo de...
Epson EF-72 alla prova: Google TV, audio...
AST SpaceMobile annuncia il razzo spazia...
Apple taglia il budget AI dei dipendenti...
Fisco e intelligenza artificiale, come c...
Synology BC510 e CC410W, la videosorvegl...
600.000 chip NVIDIA fermi a Hong Kong: l...
La Cina punta tutto sull'allunaggio con ...
LG Italia compie 30 anni: gli italiani v...
Fiido esagera: Black Friday anticipato c...
Tutte le offerte Amazon del momento: ai ...
Dropbox compra Tigris Data per 350 milio...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:43.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v