Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-03-2006, 12:32   #1
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
[JAVA] soluzione per stack + gestione delle eccezzioni

Allora ho creato uno stack ... come sembra come soluzione??

Codice:
/**
 *Questa classe serve per gestire una lista di tipo LIFO
 */

public class StackLifo{
	/* array dello stack */
	private int []pila;
	/* puntatore alla prima cella libera */
	private int cellaLibera;
	/* costruttore senza parametri */
	public StackLifo () {
		this (100);
	}
	/**
	 *Costruttore con parametri
	 *@param: dimensione dello stack 
	 */
	public StackLifo (int dim) {
		if (dim <= 0){
			System.out.println ("La dimensione non e' corretta (dim > 0) . Viene assegnato il valore di 100");
			dim = 100;
		}
		this.pila = new int [dim];
	}
	/**
	 *Il metodo push permette di inserire un valore nello stack.
	 *@param: valore intero
	 */
	public void push(int value) throws FullStackLifoException{
		if (this.cellaLibera == this.pila.length){
			throw new FullStackLifoException ();
		}
		System.out.println ("Inserito il valore: "+value);		
		this.pila[cellaLibera] = value;
		this.cellaLibera ++;
	}
	/**
	 *Il metodo pop permette di estrarre un valore nello stack.
	 */
	public int push() throws EmptyStackLifoException{
		if (this.cellaLibera == 0){
			throw new EmptyStackLifoException ();
		}
		this.cellaLibera --;
		return this.pila[cellaLibera];	
	}
}
Codice:
/* Programma che utilizza uno stack */

public class GestioneLista {
	public static void main (String[] arg){
		StackLifo pila;
		pila = new StackLifo(10);
		/* inseriamo finche non saturiamo la lista */
		for (int i=0; i<12; i++){
			try{
				pila.push(i);
			} 
			catch (FullStackLifoException e){
				System.out.println (e.toString());
			}
		}
		/* svuotiamo finche non cerchiamo di estarre dalla lista vuota */
		int x=0;
		for (int i=0; i<12; i++){
			try{
				x = pila.pop();
				System.out.println ("Estratto: "+x);
			} 
			catch (EmptyStackLifoException e){
				System.out.println (e.toString());
			}
		}
		
	}
}
Codice:
/**
 *Questa eccezione è invocata quando la lista è vuota e si cerca di estarre dati
 */

public class EmptyStackLifoException extends Exception {
	/* costruttore */
	public EmptyStackLifoException (){
		super ("Lista vuota"); 
	}
	/* override del metodo toString */
	public String toString (){
		return getMessage ();
	}
}
Codice:
/**
 *Questa eccezione serve per gestire il caso che si cerchi di andare a scrivere
 *fuori dallo stack
 */

public class FullStackLifoException extends Exception {
	/* costruttore */
	public FullStackLifoException (){
		super ("Coda piena");
	}
	/* override del metodo to String */
	public String toString (){
		return getMessage();
	}
}
Allora funziona funziona .. però dato che è il mio primo programma che gestisce anche le eccezzioni volevo sapere se l'approccio è corretto.
Alcune delucidazioni in merito...
ho fatto nella funziona push un lancio di eccezzione nel caso che si cerca di estarre dati ... fin qui ... tutto ok ... anche se io ho ancora in mente l'aspetto procedurale e quindi mi viene in mente sempre di controllare con gli if e non lanciare mai eccezzioni tralasciamo questo fatto ... allora ma dato che la funzione fa un ritorno di un valore intero ... come mai non mi dice nulla quando lancio questa eccezzione nel main??

Comunque è giusto questo approccio? cioè nei medoti della classe io lancio solo l'eccezzione e poi per propagazione la piglio nel main?

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso

Ultima modifica di Fenomeno85 : 26-03-2006 alle 11:37.
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2006, 13:47   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Ma ... esiste già la classe java.util.Stack!!

Comunque, a parte questo, la tua implementazione non mi sembra molto chiara!
Prima di tutto io lancerei una eccezione di tipo IllegalArgumentException (o un suo derivato) se si tenta di creare lo stack con una dimensione negativa. Mandare fuori qualcosa su System.out a quel livello non mi sembra una buona cosa.

Poi oltretutto hai invertito il significato di push e pop. push (dall'inglese: spingere) serve per inserire un elemento nello stack e pop serve per estrarre un elemento dallo stack, non il contrario!

Quando si crea una nuova eccezione normalmente è più che sufficiente implementare soltanto i due costruttori: quello senza argomenti e quello con argomento stringa:
Codice:
public class MiaEccezione extends Exception {
    public MiaEccezione() {
	super();
    }

    public MiaEccezione(String s) {
	super(s);
    }
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2006, 14:04   #3
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
si che pirla che sono

provvedo a correggere


~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2006, 10:03   #4
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Quote:
Originariamente inviato da Fenomeno85
si che pirla che sono

provvedo a correggere


~§~ Sempre E Solo Lei ~§~
E comunque eccezione si scrive con una 'z' sola!
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2006, 11:39   #5
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
Quote:
Originariamente inviato da Mixmar
E comunque eccezione si scrive con una 'z' sola!
ok a parte questo la metodologia è corretta?

poi altra cosa ... come faccio a lanciare l'eccezione sui valori passati?



~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2006, 12:26   #6
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
L'approccio è corretto; non ho capito cos intendi con queste due domande:

1 - come faccio a lanciare l'eccezione sui valori passati?
2 - allora ma dato che la funzione fa un ritorno di un valore intero ... come mai non mi dice nulla quando lancio questa eccezzione nel main
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2006, 18:01   #7
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
Quote:
Originariamente inviato da anx721
L'approccio è corretto; non ho capito cos intendi con queste due domande:

1 - come faccio a lanciare l'eccezione sui valori passati?
2 - allora ma dato che la funzione fa un ritorno di un valore intero ... come mai non mi dice nulla quando lancio questa eccezzione nel main
1) praticamente facciamo che io ho

int ciapet (int val)

mi passano una stringa ... io come faccio a capire l'eccezzione?

che istruzioni devo mettere nella funzione?

2) allora l'istruzione era x = pila.pop ()

pop ritorno un intero ... però io lo faccio tornare solo se non viene chiamata l'eccezione ... mentre se c'è l'eccezione non faccio tornare nulla ... ma questo non produce nessun effetto su x o sbaglio??

3) tornando su quando alloco l'array ... te mi hai detto che non è corretto re-inizializzare con un valore che decido e far visualizzare un messaggio ... in quel caso la soluzione corretta quale sarebbe stata? ... ipotizziamo che mi ritrovo in situazioni del genere come mi devo comportare? ... richiedere il valore?

4) la cosa corretta sarebbe sempre controllare quando alloco e quindi mettere sempre tra try catch per queste istruzioni per vedere se non ho finito lo space? ... ipotizziamo che mi scatta l'eccezzione ... come mi comporto?? ritendo l'allocazione?? oppure chiudo e avviso che non è possibile allocare??

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2006, 19:20   #8
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
1) praticamente facciamo che io ho

int ciapet (int val)

mi passano una stringa ... io come faccio a capire l'eccezzione?

che intendi mi passaqno una stringa?!? i lmetodo prende un int e quindi da nessuna parte potrà essere invocato passando una stringa se no il compilatore ti striglia..non siamo mica in C...

che istruzioni devo mettere nella funzione?

2) allora l'istruzione era x = pila.pop ()

pop ritorno un intero ... però io lo faccio tornare solo se non viene chiamata l'eccezione ... mentre se c'è l'eccezione non faccio tornare nulla ... ma questo non produce nessun effetto su x o sbaglio??

Un'eccezione non viene ritornata ma provoca un'alterazione nel normale flusso del programma; quando viene lanciata il controllo del flusso passa al blocco catch corrispondente al primo blocco try che racchiude l'istruzione che ha causato l'eccezione, o provoca la terminazione del thread se tale blocco try non c'è.

3) tornando su quando alloco l'array ... te mi hai detto che non è corretto re-inizializzare con un valore che decido e far visualizzare un messaggio ... in quel caso la soluzione corretta quale sarebbe stata? ... ipotizziamo che mi ritrovo in situazioni del genere come mi devo comportare? ... richiedere il valore?

Non te l'ho detto io ma la cosa è corretta...non ha senso richiedere il valore: lo stack puo essere usato in un qualsiasi contesto: chi ti dice che c'è l'utente che digita sulla console per reimmettere il valore...semplciemente puoi non fare nulla: se ti si passa un valore negativo quando vai ad istanziare l'array con un valore negativo partirà un'eccezione in quanto non si puo istanziare un array con dimensione negativa e quindi sei a posto. Se vuoi lanciare una tua specifica eccezione controlli direttamente se il valore è negativoe in tal caso lancia una tua eccezione.

4) la cosa corretta sarebbe sempre controllare quando alloco e quindi mettere sempre tra try catch per queste istruzioni per vedere se non ho finito lo space? ... ipotizziamo che mi scatta l'eccezzione ... come mi comporto?? ritendo l'allocazione?? oppure chiudo e avviso che non è possibile allocare??

quando allochi cosa? Lo stack? Hai finito quale space? O intendi allocare un nuovo elemeno nello stack? Nel primo caso lo spazio finisce se è terminata la memoria della jvm e non puoi farci nulla... Nel secondo caso non è necessario il blocco try: basta che implementi un metodo full() che ritorna un booleano che ti dice se lo stack è pieno, e analogamente un metodo empty() che ti ritorna true se lo stack è vuoto. prima di un'operazione controlli se puoi eseguirla con tali metodi.


infine..prima ti ho detto che l'aproccio era corretto, ora rileggendo meglio mi accorgo che non lo è del tutto. Le eccezioni che lanci se lo stack è pieno o vuoto estendono Exception: questo ti costringe a mettere ogni operazione sullo stack all'interno di un blocco try in quanto per le eccezioni normali vale la regola catch or declare. Ma se rifletti ci sono tante istruzioni java che possono lanciare un'eccezione senza che ciò ti constringa a racchiuderle in un blocco try. Pensa ad esempio a quando invochi un metodo su un oggetto null: scatta la NullPointerException, eppure non sei obbligato a mettere ogni invocazione di metodo all'interno di un try. E gli esempi sono tanti, ad esempio se provi ad accedere oltri i limiti di un array o se richiedi ad un Vector di 10 elementi di avere il suo undicesimo elemento scatta la ArrayIndexOutOfBoundsexception. In tutti questi casi vengono lanciate eccezioni, ma non sono eccezioni che estendono Exception, ma una sua sottoclasse, ovvero RuntimeException: la regola catch or declare infatti afferma che tutte le istruzioni che lanciano eccezioni CHE NON SONO RuntimeException devono essere incluse in un blocco try oppure il metodo deve dichiare di lanciare tali eccezioni. Questo significa che se le tue eccezioni di stack pieno o vuoto estendono RuntimeException invece di Exception puoi invocare quei metodi sullo stack senza chiuderli in un blocco try.

Con un minimo di esperienza riesci a capire quando un'eccezione deve essere runtime e quando no: le runtime exception solitamente indicano errori di programmazione e non dovrebbero essere catturate per gestirle in quanto un errore di programmazione è giusto che provochi il crash di un programma. per questo non 'cè ll'obbligo di gestirle. Tali errori di programmazione sono sempre evitabili dal programmatore: nel tuo caso ti basta verificare che lo stack non sia pieno prima di aggiungervi un elemento per evitare l'eccezione. Analogamente il progrmamtore puo sempre fare in modo di non invocare metodi su un oggetto nullo, può sempre fare in modo di non istanziare array con numeri negativi, ecc...per questo non è necessario catturare queste eccezioni. Le eccezioni non runtime invece generalmente rappresentano situazioni di errore o anomale non sempre verificabili dal progrmmatore. Ad esempio la lettura di un file può sempre andare male indipendentemente da come il programmatore implementa la cosa, per questo è obbligatorio catturare e gestire le IOException perche non sono evitabili a priori.
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals

Ultima modifica di anx721 : 26-03-2006 alle 19:26.
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 27-03-2006, 07:46   #9
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8895
grazie mille

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
ESA Solar Orbiter ha studiato il flusso ...
Larry Ellison guadagna 101 miliardi in u...
Johnson Controls amplia la gamma di solu...
NASA Perseverance: il rover potrebbe ave...
Quelli di Immuni si 'pappano' Vimeo: Ben...
Changan lancia la Deepal S05 in Europa, ...
Substrati in vetro, Intel smentisce le v...
ECOVACS DEEBOT T50 PRO OMNI Gen2 fa piaz...
Windelo 62: catamarano a vela che unisce...
Francia, in arrivo un incentivo di 1.000...
Haier, la sorpresa a IFA: la lavatrice C...
GeForce RTX 5000 SUPER in arrivo? Sembra...
Ionity prova una soluzione contro i ladr...
Pirateria, svolta clamorosa: Dazn e Lega...
Maxi richiamo Toyota e Lexus: oltre 900....
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: 06:54.


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