Está en la página 1de 6

Java

EJERCICIO DE JAVA RESUELTO

1. Escribir una clase llamada Pila, en el fichero Pila.java, que implemente las estructuras de datos y mtodos necesarios para manejar una estructura LIFO (una pila) de nmeros enteros, cuya capacidad puede definir el usuario. Debe incluir los siguientes mtodos: apilar(elem), desapilar(), verCima(),
vaciar(), estaLlena(), estaVacia() y mostrar().

Adems se deben gestionar las excepciones causadas por encontrarse la pila llena o vaca. 2. Escribir un programa Java orientado a objetos, llamado MainPila.java, que realice las siguientes operaciones: Crear una pila de tamao 10. Comprobar que est vaca. Apilar los nmeros 23, -45, -12, 67, 1, 0, -43, 89. Desapilar tres elementos. Consultar la cima de la pila Apilar los nmeros 564, -987, -10, 56, 1111. Comprobar que est llena. Mostrar su contenido. Apilar el nmero 666.

SOLUCIN Empezamos declarando las dos clases que se utilizarn para gestionar las excepciones que se lanzarn cuando la pila est llena y cuando est vaca, ambas heredan de la clase
Exception.

La clase PilaVaciaException tiene un nico constructor que se encarga de llamar al constructor de su superclase para que se gestione la excepcin.
public class PilaVaciaException extends Exception { public PilaVaciaException ( ) { super ( ) ; } }

Java

La clase PilaLlenaException tiene un atributo que almacenar el valor del elemento que provoca la excepcin, un mtodo para recuperar el valor del dato que almacena y el constructor.
public class PilaLlenaException extends Exception { private int dato ; public PilaLlenaException ( int d ) { super ( ) ; dato = d ; } public int getDato ( ) { return dato ; } }

La clase Pila tiene 3 atributos: datos, que es un array para almacenar todos los elementos de la pila; capacidad, para guardar el tamao mximo de la estructura de datos; indice, que indicar la posicin en el array del siguiente elemento que hay que guardar.
public class Pila { // ATRIBUTOS private int capacidad ; private int indice ; private int[] datos ; // CONSTRUCTORES // Constructor sin parmetros que define un array de tamao 10. public Pila ( ) { capacidad = 10 ; indice = 0 ; datos = new int [capacidad] ; } // Constructor que toma como parmetro el tamao del array. public Pila ( int cap ) { capacidad = cap ; indice = 0 ; datos = new int [capacidad] ; }

Java

// MTODOS // apilar(): apila un elemento en la pila. // Si est llena, lanza la excepcin PilaLlenaException. public void apilar ( int elem ) throws PilaLlenaException { if ( !estaLlena() ) { datos[indice++] = elem ; } else { throw new PilaLlenaException ( elem ) ; } } // Desapilar(): desapila el elemento de la cima de la pila. // Si est vaca, lanza la excepcin PilaVaciaException. public int desapilar ( ) throws PilaVaciaException { if ( !estaVacia() ) { return datos[--indice] ; } else { throw new PilaVaciaException ( ) ; } } // verCima(): consulta sin desapilar la cima de la pila. public int verCima ( ) throws PilaVaciaException { if ( !estaVacia() ) { return datos[indice-1] ; } else { throw new PilaVaciaException ( ) ; } } // vaciar(): vaca la pila. public void vaciar ( ) { indice = 0 ; } // estaLlena(): devuelve true si la pila est llena. public boolean estaLlena ( ) { return ( indice == capacidad ) ; } // estaVacia(): devuelve true si la pila est vaca. public boolean estaVacia ( ) { return ( indice == 0 ) ; }

Java

// mostrar(): recorre la pila desde la base mostrando su contenido. public void mostrar ( ) throws PilaVaciaException { if ( !estaVacia() ) { for ( int i = 0 ; i < indice ; i++ ) { System.out.println("Elemento en posicion "+i+": "+datos[i] ); } } else { throw new PilaVaciaException ( ) ; } } }

La clase UsoDePila implementa el mtodo main en el cual se va a hacer uso de la estructura Pila antes descrita.
public class UsoDePila { public static void main ( String args[] ) { int aux ; Pila pila = new Pila ( 10 ) ; if ( pila.estaVacia() ) { System.out.println ( "\nLa pila esta vacia\n" ) ; } try { aux = 23 ; pila.apilar aux = -45 ; pila.apilar aux = -12 ; pila.apilar aux = 67 ; pila.apilar aux = 1 ; pila.apilar aux = 0 ; pila.apilar aux = -43 ; pila.apilar aux = 89 ; pila.apilar

System.out.println ( aux ) ; System.out.println ( aux ) ; System.out.println ( aux ) ; System.out.println ( aux ) ; System.out.println ( aux ) ; System.out.println ( aux ) ; System.out.println ( aux ) ; System.out.println ( aux ) ;

( "Apilando elemento: " + aux ) ; ( "Apilando elemento: " + aux ) ; ( "Apilando elemento: " + aux ) ; ( "Apilando elemento: " + aux ) ; ( "Apilando elemento: " + aux ) ; ( "Apilando elemento: " + aux ) ; ( "Apilando elemento: " + aux ) ; ( "Apilando elemento: " + aux ) ;

System.out.println ( ) ; aux = pila.desapilar() ; System.out.println ( "Desapilando elemento: " + aux ) ; aux = pila.desapilar() ; System.out.println ( "Desapilando elemento: " + aux ) ; aux = pila.desapilar() ; System.out.println ( "Desapilando elemento: " + aux ) ;

Java

System.out.println ( "\nCima: " + pila.verCima() + "\n" ) ; aux = 564 ; pila.apilar aux = -987; pila.apilar aux = -10 ; pila.apilar aux = 56 ; pila.apilar aux = 1111; pila.apilar System.out.println ( aux ) ; System.out.println ( aux ) ; System.out.println ( aux ) ; System.out.println ( aux ) ; System.out.println ( aux ) ; ( "Apilando elemento: " + aux ) ; ( "Apilando elemento: " + aux ) ; ( "Apilando elemento: " + aux ) ; ( "Apilando elemento: " + aux ) ; ( "Apilando elemento: " + aux ) ;

if ( pila.estaLlena() ) { System.out.println ( "\nLa pila esta llena\n" ) ; } System.out.println ( "Mostrando contenido de la pila..." ) ; pila.mostrar() ; System.out.println ( ) ; aux = 666 ; System.out.println ( "Apilando elemento: " + aux ) ; pila.apilar ( aux ) ; System.out.println ( "Esta linea no se debe mostrar" ) ; } catch ( PilaLlenaException e ) { System.out.println ( "Imposible apilar el elemento " + e.getDato() + ". Pila llena" ) ; } catch ( PilaVaciaException e ) { System.out.println ( "ERROR. Imposible desapilar. Pila vacia") ; } } }

La salida resultante de la ejecucin del cdigo de la clase UsoDePila es la siguiente:


> javac *.java (se generan PilaVaciaException.class, PilaLlenaException.class, Pila.class y UsoDePila.class) > java UsoDePila La pila esta vacia Apilando Apilando Apilando Apilando Apilando Apilando Apilando Apilando elemento: elemento: elemento: elemento: elemento: elemento: elemento: elemento: 23 -45 -12 67 1 0 -43 89

Desapilando elemento: 89 Desapilando elemento: -43 Desapilando elemento: 0

Java

Cima: 1 Apilando Apilando Apilando Apilando Apilando elemento: elemento: elemento: elemento: elemento: 564 -987 -10 56 1111

La pila esta llena Mostrando contenido de la pila... Elemento en posicion 0: 23 Elemento en posicion 1: -45 Elemento en posicion 2: -12 Elemento en posicion 3: 67 Elemento en posicion 4: 1 Elemento en posicion 5: 564 Elemento en posicion 6: -987 Elemento en posicion 7: -10 Elemento en posicion 8: 56 Elemento en posicion 9: 1111 Apilando elemento: 666 ERROR. Imposible apilar el elemento 666. Pila llena

También podría gustarte