Estás en:   ArielOrtiz.info > Estructura de datos > Práctica 2: Bolsa

Práctica 2: Bolsa

Objetivos

Durante esta actividad, los alumnos serán capaces de:

Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.

Descripción

Esta actividad puede ser elaborada de manera individual o en parejas.

Escribe una clase llamada edd.util.SimpleBag. Esta clase representa la estructura de datos bolsa que permite almacenar objetos genéricos.

La clase debe ser implementada utilizando una lista sencillamente encadenada, conformada por instancias de la clase edd.util.Node definida de la siguiente manera:

package edd.util;

public class Node<E> {
    public E info;
    public Node<E> next;
}

En la parte superior del archivo SimpleBag.java coloca en comentarios los datos personales de los autores de la tarea. Por ejemplo:

/*--------------------------------------------------------------------
 * Práctica 2: Bolsa 
 * Fecha: 31-Ene-2014
 * Autores:
 *           1166611 Pepper Pots  
 *           1160611 Anthony Stark
 *--------------------------------------------------------------------*/

Estos son los métodos que debe soportar la clase edd.util.SimpleBag:

  1. public SimpleBag()

    Constructor que permite crear una nueva bolsa.

  2. public void add(E x)

    Inserta x al final de esta bolsa.

  3. public String toString()

    Devuelve una cadena de caracteres que representa esta bolsa con todos los elementos que contiene. Referirse a las pruebas de unidad para conocer el formato exacto.

  4. public boolean remove(E x)

    Si x existe en esta esta bolsa, lo remueve y devuelve true. En caso contrario no modifica la bolsa y devuelve false. Utiliza el método equals para determinar si x existe en esta bolsa. Si la bolsa contiene a x más de una vez, solo remueve la primera ocurrencia.

  5. public int size()

    Devuelve el número de elementos contenidos actualmente en esta bolsa.

  6. public boolean isEmpty()

    Devuelve true si esta bolsa está vacía, false en caso contrario.

  7. public boolean contains(E x)

    Devuelve true si esta bolsa contiene a x, false en caso contrario. Utiliza el método equals para determinar si x existe en esta bolsa.

  8. public int count(E x)

    Devuelve el número de veces que aparece x en esta bolsa. Utiliza el método equals para determinar si x existe en esta bolsa.

  9. public void clear()

    Vacía completamente esta bolsa.

Prueba tu código usando la siguiente clase de JUnit:

package edd.util;

import static org.junit.Assert.*;

import org.junit.Test;

public class SimpleBagTest {

    @Test
    public void test1() {
        SimpleBag<Integer> b = new SimpleBag<>();
        assertEquals(0, b.size());
        assertTrue(b.isEmpty());
        assertEquals("[]", b.toString());
        b.add(4);
        assertEquals("[4]", b.toString());
        b.add(8);
        assertEquals("[4, 8]", b.toString());
        b.add(15);
        assertEquals("[4, 8, 15]", b.toString());
        b.add(16);
        assertEquals("[4, 8, 15, 16]", b.toString());
        assertEquals(4, b.size());
        assertFalse(b.isEmpty());
        b.add(23);
        assertEquals("[4, 8, 15, 16, 23]", b.toString());
        b.add(42);
        assertEquals("[4, 8, 15, 16, 23, 42]", b.toString());
        b.add(8);
        assertEquals("[4, 8, 15, 16, 23, 42, 8]", b.toString());
        assertEquals(7, b.size());
        assertTrue(b.remove(8));
        assertEquals("[4, 15, 16, 23, 42, 8]", b.toString());
        assertTrue(b.remove(8));
        assertEquals("[4, 15, 16, 23, 42]", b.toString());
        assertFalse(b.remove(8));
        assertEquals("[4, 15, 16, 23, 42]", b.toString());
        assertTrue(b.remove(4));
        assertEquals("[15, 16, 23, 42]", b.toString());
        assertTrue(b.remove(42));
        assertEquals("[15, 16, 23]", b.toString());
        assertTrue(b.remove(15));
        assertEquals("[16, 23]", b.toString());
        assertEquals(2, b.size());
        assertFalse(b.isEmpty());
        assertTrue(b.remove(23));
        assertEquals("[16]", b.toString());
        assertTrue(b.remove(16));
        assertEquals("[]", b.toString());
        assertEquals(0, b.size());
        assertTrue(b.isEmpty());
    }

    @Test
    public void test2() {
        SimpleBag<String> b = new SimpleBag<>();
        b.add("enero");
        b.add("febrero");
        b.add("marzo");
        b.add("enero");
        b.add("abril");
        b.add("mayo");
        b.add("enero");
        b.add("junio");
        b.add("julio");
        assertEquals("[enero, febrero, marzo, enero, abril, "
                + "mayo, enero, junio, julio]", b.toString());
        assertEquals(9, b.size());
        assertTrue(b.contains("enero"));
        assertTrue(b.contains("febrero"));
        assertTrue(b.contains("marzo"));
        assertTrue(b.contains("abril"));
        assertTrue(b.contains("mayo"));
        assertTrue(b.contains("julio"));
        assertFalse(b.contains("agosto"));
        assertFalse(b.contains("septiembre"));
        assertFalse(b.contains("octubre"));
        assertEquals(3, b.count("enero"));
        assertEquals(1, b.count("febrero"));
        assertEquals(1, b.count("marzo"));
        assertEquals(1, b.count("abril"));
        assertEquals(1, b.count("mayo"));
        assertEquals(1, b.count("junio"));
        assertEquals(1, b.count("julio"));
        assertEquals(0, b.count("agosto"));
        assertEquals(0, b.count("septiembre"));
        assertEquals(0, b.count("octubre"));
        b.clear();
        assertEquals("[]", b.toString());
        assertTrue(b.isEmpty());
        assertEquals(0, b.size());
    }

    @Test
    public void test3() {
        SimpleBag<Boolean> b = new SimpleBag<>();
        assertTrue(b.isEmpty());
        assertEquals(0, b.size());
        b.clear();
        assertTrue(b.isEmpty());
        assertEquals(0, b.size());
        b.add(true);
        b.add(false);
        b.add(true);
        assertEquals("[true, false, true]", b.toString());
        assertFalse(b.isEmpty());
        assertEquals(3, b.size());
        b.clear();
        assertEquals("[]", b.toString());
        assertTrue(b.isEmpty());
        assertEquals(0, b.size());
        b.clear();
        assertEquals("[]", b.toString());
        assertTrue(b.isEmpty());
        assertEquals(0, b.size());
        b.add(false);
        b.add(true);
        b.add(false);
        b.add(false);
        assertEquals("[false, true, false, false]", b.toString());
        assertFalse(b.isEmpty());
        assertEquals(4, b.size());
        b.remove(false);
        assertEquals("[true, false, false]", b.toString());
        assertFalse(b.isEmpty());
        assertEquals(3, b.size());
        b.clear();
        assertEquals("[]", b.toString());
        assertTrue(b.isEmpty());
        assertEquals(0, b.size());
    }
}

¿Qué se debe entregar?

Sube el archivo SimpleBag.java usando el Sistema de Entrega de Tareas Automatizado. Si la práctica fue desarrollada en equipo, basta que solo uno de los miembros la entregue. No se aceptan tareas por ningún otro medio.

Fecha límite: Viernes, 31 de enero.

Evaluación

Esta actividad será evaluada usando los siguientes criterios:

100 La actividad cumple con todos los requerimientos.
-10 No se incluyó en comentario los datos de los autores.
10 El programa fuente contiene errores sintácticos.
50-90 El programa produce algunos errores al momento de correrlo.
DA La solución es un plagio.