6
EJERCICIOS DE JAVA RESUELTO 1. Escribir una clase llamada Pila, en el fichero Pila.java, que implemente las estructuras de datos y métodos necesarios para manejar una estructura LIFO (una pila) de números enteros, cuya capacidad puede definir el usuario. Debe incluir los siguientes métodos: apilar(elem), desapilar(), verCima(), vaciar(), estaLlena(), estaVacia() y mostrar(). Además se deben gestionar las excepciones causadas por encontrarse la pila llena o vacía. 2. Escribir un programa Java orientado a objetos, llamado MainPila.java, que realice las siguientes operaciones: Crear una pila de tamaño 10. Comprobar que está vacía. Apilar los números 23, -45, -12, 67, 1, 0, -43, 89. Desapilar tres elementos. Consultar la cima de la pila Apilar los números 564, -987, -10, 56, 1111. Comprobar que está llena. Mostrar su contenido. Apilar el número 666. SOLUCIÓN Empezamos declarando las dos clases que se utilizarán para gestionar las excepciones que se lanzarán cuando la pila esté llena y cuando esté vacía, 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 excepción.

ejemplo pila

Embed Size (px)

Citation preview

Page 1: ejemplo pila

EJERCICIOS DE JAVA RESUELTO1. Escribir una clase llamada Pila, en el fichero Pila.java, que implemente lasestructuras de datos y métodos necesarios para manejar una estructura LIFO(una pila) de números enteros, cuya capacidad puede definir el usuario.

Debe incluir los siguientes métodos: apilar(elem), desapilar(), verCima(),vaciar(), estaLlena(), estaVacia() y mostrar().

Además se deben gestionar las excepciones causadas por encontrarse la pilallena o vacía.

2. Escribir un programa Java orientado a objetos, llamado MainPila.java, querealice las siguientes operaciones:Crear una pila de tamaño 10.Comprobar que está vacía.Apilar los números 23, -45, -12, 67, 1, 0, -43, 89.Desapilar tres elementos.Consultar la cima de la pilaApilar los números 564, -987, -10, 56, 1111.Comprobar que está llena.Mostrar su contenido.Apilar el número 666.

SOLUCIÓNEmpezamos declarando las dos clases que se utilizarán para gestionar las excepcionesque se lanzarán cuando la pila esté llena y cuando esté vacía, ambas heredan de la claseException.

La clase PilaVaciaException tiene un único constructor que se encarga de llamar alconstructor de su superclase para que se gestione la excepción.

public class PilaVaciaException extends Exception{public PilaVaciaException ( ){super ( ) ;}}

La clase PilaLlenaException tiene un atributo que almacenará el valor del elementoque provoca la excepción, un método para recuperar el valor del dato que almacena y elconstructor.

public class PilaLlenaException extends Exception{private int dato ;public PilaLlenaException ( int d ){super ( ) ;dato = d ;}public int getDato ( )

Page 2: ejemplo pila

{return dato ;}}

La clase Pila tiene 3 atributos: datos, que es un array para almacenar todos loselementos de la pila; capacidad, para guardar el tamaño máximo de la estructura dedatos; indice, que indicará la posición en el array del siguiente elemento que hay queguardar.

public class Pila{// ATRIBUTOSprivate int capacidad ;private int indice ;private int[] datos ;// CONSTRUCTORES// Constructor sin parámetros que define un array de tamaño 10.public Pila ( ){capacidad = 10 ;indice = 0 ;datos = new int [capacidad] ;}// Constructor que toma como parámetro el tamaño del array.public Pila ( int cap ){capacidad = cap ;indice = 0 ;datos = new int [capacidad] ;}// MÉTODOS// apilar(): apila un elemento en la pila.// Si está llena, lanza la excepción 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á vacía, lanza la excepción PilaVaciaException.public int desapilar ( ) throws PilaVaciaException{if ( !estaVacia() ){return datos[--indice] ;}else{throw new PilaVaciaException ( ) ;}}// verCima(): consulta sin desapilar la cima de la pila.

Page 3: ejemplo pila

public int verCima ( ) throws PilaVaciaException{if ( !estaVacia() ){return datos[indice-1] ;}else{throw new PilaVaciaException ( ) ;}}// vaciar(): vacía 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á vacía.public boolean estaVacia ( ){return ( indice == 0 ) ;}// 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 método main en el cual se va a hacer uso de laestructura 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 ; System.out.println ( "Apilando elemento: " + aux ) ;

Page 4: ejemplo pila

pila.apilar ( aux ) ;aux = -45 ; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( aux ) ;aux = -12 ; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( aux ) ;aux = 67 ; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( aux ) ;aux = 1 ; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( aux ) ;aux = 0 ; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( aux ) ;aux = -43 ; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( aux ) ;aux = 89 ; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( 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 ) ;System.out.println ( "\nCima: " + pila.verCima() + "\n" ) ;aux = 564 ; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( aux ) ;aux = -987; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( aux ) ;aux = -10 ; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( aux ) ;aux = 56 ; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( aux ) ;aux = 1111; System.out.println ( "Apilando elemento: " + aux ) ;pila.apilar ( 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 ejecución del código de la clase UsoDePila es la siguiente:> javac *.java

(se generan PilaVaciaException.class, PilaLlenaException.class, Pila.class

Page 5: ejemplo pila

y UsoDePila.class)

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