Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
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: 8897
[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
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
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: 8897
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: 8897
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: 8897
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: 8897
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


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Microsoft Defender: falso allarme sull'a...
Aerei in volo e truppe pronte all'assalt...
Usano Claude per hackerare OpenAI: ricer...
RatHat: il nuovo malware Android usa il ...
Domanda di petrolio in calo di 2,5 milio...
Il meglio delle offerte weekend Amazon a...
Dopo oltre 100 anni di tentativi, l'IA d...
Speciale robot aspirapolvere in offerta ...
L'IA sta cancellando i lavori junior? Il...
Debutta Chery Italia: non più sol...
Addio ai dischi? Xbox ci aveva già...
Speciale TV Amazon: 4 modelli, da 139€ f...
Il nuovo iPhone 18 Pro Max ha una ricari...
Speciale smartphone Android: 7 modelli i...
La Camera USA presenta il conto: i data ...
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: 02:15.


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