Fenomeno85
25-03-2006, 12:32
Allora ho creato uno stack ... come sembra come soluzione??
/**
*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];
}
}
/* 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());
}
}
}
}
/**
*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 ();
}
}
/**
*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? :stordita:
~§~ Sempre E Solo Lei ~§~
/**
*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];
}
}
/* 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());
}
}
}
}
/**
*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 ();
}
}
/**
*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? :stordita:
~§~ Sempre E Solo Lei ~§~