RSS

Deberes – Assertions

22 Mar

Algunos ejercicios para practicar Assertions:

  • Ejercicio 1: 

Crear una clase Assert_Identificador.java que utilice assert como identificador y que imprima “Correcto” si el argumento pasado en la línea de comandos es divisible por 5 y “No Correcto” en caso contrario.

Compilar normalmente para observar el fallo.
Compilar y ejecutar para que tome el código antiguo sin problemas.

  • Ejercicio 2: 

Crear una clase Assert_PalabraClave.java que tenga como atributo un array de enteros llamado edades y crear un método privado mediaEdades que devuelva la medida de las edades en el array y se asegure con una assertion que la media será siempre > 0.

Compilar indicando -source 1.3 para observar el fallo.
Compilar normalmente y ejecutar habilitando assertions.
Introducir valores incorrectos para provocar un AssertionError

  • Ejercicio 3:

Corregir la siguiente clase para que todos los assertions estén usados apropiadamente:

public class Bus {
    private int capacidad;
    private int asientosDisponibles;
    private int asientosOcupados;

    //Constructor para elegir capacidad y asientos iniciales ocupados.
    public Bus(int capacidad, int asientosOcupados){
       assert(capacidad>0);
       assert(asientosOcupados<capacidad);
       this.capacidad = capacidad;
       this.asientosDisponibles = this.capacidad - asientosOcupados;
       this.asientosOcupados = asientosOcupados;
    }

   public void subir(int personas)
    {
        try{comprobarPlazasDisponibles(personas);
        }catch(IllegalArgumentException e){
             System.out.println(e.getMessage());
             personas = this.asientosDisponibles;
        }
        this.asientosDisponibles = this.asientosDisponibles - personas;
        this.asientosOcupados = this.asientosOcupados + personas;
        assert(this.capacidad == this.asientosDisponibles + this.asientosOcupados);
    }

    private void comprobarPlazasDisponibles (int personas) throws IllegalArgumentException{
      if (personas > this.asientosDisponibles){
          throw new IllegalArgumentException("No hay asientos para " + personas + " personas");
      }
    }

    public void bajar(int personas)
    {
        try{ comprobarPlazasOcupadas(personas); //Llama a método privado.
        }catch(IllegalArgumentException e){
            System.out.println(e.getMessage());
            personas = this.asientosOcupados;
        }
    this.asientosDisponibles = this.asientosDisponibles + personas;
        this.asientosOcupados = this.asientosOcupados - personas;
        assert(this.capacidad == this.asientosDisponibles + this.asientosOcupados);
    }

    private void comprobarPlazasOcupadas (int personas) throws IllegalArgumentException{
      if(this.asientosOcupados < personas){
        throw new IllegalArgumentException("No hay " + personas + " personas ocupando asientos");
      }
    }

    public void mostrar()
    {    System.out.println("Capacidad: " + this.capacidad + ".\n" +
                "Ocupados: " + this.asientosOcupados + ".\n" +
	        "Disponibles: " + this.asientosDisponibles + ".\n");
    }

    public static void main (String [] args)
    {
     assert(Integer.parseInt(args[0])>0 && Integer.parseInt(args[1])>0);
     Bus b = new Bus(Integer.parseInt(args[0]), Integer.parseInt(args[1]));     b.mostrar();

    System.out.println("Suben 6");  b.subir(6);  b.mostrar();
    System.out.println("Bajan 3");  b.bajar(3);  b.mostrar();
    System.out.println("Sube 1");   b.subir(1);  b.mostrar();
    System.out.println("Bajan 42"); b.bajar(42); b.mostrar();
    }
}

  • Ejercicio4:

Escribir un bloque switch en el que usemos una assertion para comprobar un caso que no debe producirse.

Soluciones en la siguiente entrada para no alargar mucho el post.

Anuncios
 
Deja un comentario

Publicado por en 22 marzo, 2012 en Deberes

 

Etiquetas: , , , , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: